【问题标题】:why is this referring to window object?为什么这指的是窗口对象?
【发布时间】:2012-12-31 19:29:37
【问题描述】:
   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 对吗?

【问题讨论】:

  • 你可以直接访问变量x。
  • window是因为在function(){}里面。

标签: javascript


【解决方案1】:

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

查看How do JavaScript closures work?的答案

【讨论】:

    【解决方案2】:
    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 相同

    【讨论】:

      【解决方案3】:

      要发出此警报 20,请将 this.x 更改为简单的 x

      【讨论】:

      • PS:要让它警报 10,o.x.
      猜你喜欢
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 2017-04-15
      • 2022-11-19
      • 2018-01-26
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多