作用域,作用域链问题

代码如下:

var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f;
}
checkscope()();

问题:1,为什么f()函数返回的是"local scope",
2,自己用谷歌调试,断点至f结束,如下图,此时checkscope执行上下文已经出栈,为什么还是"local scope",为什么不是"global scope"?
clipboard.png

阅读 2.4k
3 个回答
  1. 函数的作用域只和它定义的地方有关,而与它运行的地方无关。

  2. 这就是闭包的典型应用。

scope是一层一层往外找的,先找到的是函数checkscope里面的
如果你想返回"global scope",那函数f返回带上this就行了,在全局作用域调用this会指向window

function f(){
    return this.scope;
}

这其实是个闭包问题。

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