自我调用匿名函数互相覆盖

时间:2013-04-04 14:32:15

标签: javascript javascript-objects

我正在使用自调用匿名函数来同时创建对象和实例。最后创建的对象将覆盖第一个对象的属性。这是为什么?

<script>
    LF = '<br/>'; //line feed

    // object a with property name
    !function () {
        window.a = this; // make global object

        this.name = 'a';

        document.write('inside: a.name=' + this.name + LF);
    }();


    // object b with property name
    !function () {
        window.b = this; // make global object

        this.name = 'b';

        document.write('inside: b.name=' + this.name + LF);
    }();


    document.write('outisde: ' + ' a.name=' + a.name + ' b.name=' + b.name + LF);

</script>

结果:

inside: a.name=a 
inside: b.name=b 
outisde: a.name=b b.name=b

2 个答案:

答案 0 :(得分:8)

因为在您的情况下window === thiswindow === a以及window === b。 在此处阅读更多内容:http://unschooled.org/2012/03/understanding-javascript-this/

答案 1 :(得分:3)

在您的两个功能中,thiswindow。因此this.name引用相同的变量inisde 两个函数。