请问该函数的返回值为啥是local?

新手上路,请多包涵
var scope = 'global'
function checkScope() {
 var scope = 'local';
 function f() {
    return scope;
 }
 return f;
}
checkScope()();
阅读 2.4k
5 个回答

JavaScript 采用的是词法作用域,函数的作用域基于函数创建的位置。

简单理解为 就近原则

google下JS闭包相关的知识吧。

简单来说就是

function checkScope() {
 var scope = 'local';
 function f() {
    return scope;
 }
 return f;
}
checkScope()();

这段代码和上面的var scope = 'global';没有一点关系~

因为函数体内重新定义了scope变量的话,不会再去使用外层变量。

你用了var来声明变量,那么就可以在任何地方对该值进行重新赋值。
如果你获取值的地方是在重新赋值后,那会返回重新赋值的结果。

如果你用let或者const声明变量,就会有不同的效果。

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