关于闭包,作用域、作用域链和上下文

var scope="global";
var a={
    scope:"local",
    checkscope:function (){
    var scope="local-1";
      
     function f(){
         // 1、return this.scope; //结果是"global" ,为什么不是local
         return scope;     //结果是"local-1"
     }
     return f;
 
    }
}


为什么1 结果是"global" ,为什么不是local?作用域、作用域链和上下文怎么理解,感觉这些有点懵,求解答
阅读 2.4k
2 个回答
function f(){
    return this.scope;
}
//当 f 被 return 出去时, this.scope 还没有被计算,
//当 f 执行时 this 根据执行环境确定,值为 window, f 的返回值为 "global"
 function f(){
     return scope;
  }
//当 f 被 return 出去时, scope 还没有被计算
//当 f 执行时 scope 获取 f 定义时的环境中(形成了一个闭包)的 scope 变量,值为 "local"

关于作用域和上下问的理解,请自行搜索,有很多很好的答案,我这里就不重复回答了

  1. var scope="local-1"这个变量是闭包中被保护的局部变量,scope:"local"只是一个普通的对象a中的一个变量,并不在闭包中。
    2.当调用对象a的方法checkscope时,return出f,此时执行f,this为全局window,所以打印出为global

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