在匿名函数执行环境不是具有全局性吗?那这里调用全局的变量是不是匿名函数就不会在作用域链一级一级的找 新人不太懂 麻烦说细一点 谢谢
var kei = "AA";
function fn() {
var kei = "haha"; //此处更改了一下
console.log(kei);
var user = "KK";
return function(){
console.log(kei);
console.log(user);
}
}
fn()(); // 输出haha haha KK
建议题主可以先看看闭包的知识点
阮一峰的网络日志---学习闭包
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
这个叫做作用域链
scope chain
。每当 JavaScript 执行一个函数时,都会创建一个作用域对象(scope object),用来保存在这个函数中创建的局部变量。它和被传入函数的变量一起被初始化。这与那些保存的所有全局变量和函数的全局对象(global object)类似,但仍有一些很重要的区别,第一,每次函数被执行的时候,就会创建一个新的,特定的作用域对象;第二,与全局对象(在浏览器里面是当做 window 对象来访问的)不同的是,你不能从 JavaScript 代码中直接访问作用域对象,也没有可以遍历当前的作用域对象里面属性的方法。
作用域对象组成了一个名为作用域链(scope chain)的链。它类似于原形(prototype)链一样,被 JavaScript 的对象系统使用。
一个闭包就是一个函数和被创建的函数中的作用域对象的组合。