javascript - 关于闭包,作用域、作用域链和上下文
高洛峰
高洛峰 2017-04-11 12:52:08
[JavaScript讨论组]
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?作用域、作用域链和上下文怎么理解,感觉这些有点懵,求解答
高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号