为什么这是指窗口对象?

时间:2012-12-31 07:50:21

标签: javascript

   var x = 5,
    o = {
        x: 10,
        doIt: function doIt(){
            var x = 20;
            setTimeout(function(){
                alert(this.x);
            }, 10);
        }
    };
o.doIt();

为什么这是指window object rather than o。我在object o上下文中,所以它应该打印我10对吗?

3 个答案:

答案 0 :(得分:4)

匿名函数在10ms后执行,执行上下文当时不在o

查看How do JavaScript closures work?

的答案

答案 1 :(得分:0)

要发出此提醒20,请将this.x更改为x

答案 2 :(得分:0)

var x = 5,
    o = {
        x: 10,
        doIt: function doIt(){
            var x = 20;
            setTimeout(function(){
                alert(this.x);
            }, 10);
        }
    };
o.doIt();

传递到setTimeout()的所有功能都在global scope中执行。值为5,因为this.x与window.x相同