0
   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 对吗?

4

3 回答 3

4

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

查看JavaScript 闭包如何工作的答案?

于 2012-12-31T07:52:38.717 回答
0

要使此警报 20,请更改this.x为 simple x

于 2012-12-31T07:54:41.080 回答
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 相同

于 2012-12-31T08:02:46.003 回答