技术之瞳上面的这段代码的输出理解

function a(){
    y = function () {
        x = 2;
    };
    return function () {
        var x = 3;
        y();
        console.log(this.x);
        debugger;
    }.apply(this, arguments);
}
a();  //2

为什么是输出 2

阅读 2.1k
3 个回答
    y = function () {
        x = 2;
    };

指定window.x = 2

然后你又在window下调用了a 当然打印2了

因为这里绑定了this的作用域,而这里的this其实是window作用域。
所以y函数执行之后this.x == 2, x == 3 输出结果。

新手上路,请多包涵
  1. 在非严格模式下不使用var定义一个变量的话,会使得这个变量作为全局对象的属性存在。浏览器即window,Node即global。

  2. 当一个函数作为普通函数调用的时候,其this指向的是全局对象。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题