函数执行环境

在匿名函数执行环境不是具有全局性吗?那这里调用全局的变量是不是匿名函数就不会在作用域链一级一级的找 新人不太懂 麻烦说细一点 谢谢

这个叫做作用域链 scope chain

每当 JavaScript 执行一个函数时,都会创建一个作用域对象(scope object),用来保存在这个函数中创建的局部变量。它和被传入函数的变量一起被初始化。这与那些保存的所有全局变量和函数的全局对象(global object)类似,但仍有一些很重要的区别,第一,每次函数被执行的时候,就会创建一个新的,特定的作用域对象;第二,与全局对象(在浏览器里面是当做 window 对象来访问的)不同的是,你不能从 JavaScript 代码中直接访问作用域对象,也没有可以遍历当前的作用域对象里面属性的方法。

作用域对象组成了一个名为作用域链(scope chain)的链。它类似于原形(prototype)链一样,被 JavaScript 的对象系统使用。

一个闭包就是一个函数和被创建的函数中的作用域对象的组合。

你怎么知道kei就是全局的?

你不 作用域上的自由变量和 this 的绑定弄混了

这里的输出不是AA AA KK吗

 var kei = "AA"; function fn { var kei = "haha"; //此处更改了一下 console.logkei; var user = "KK"; return function{ console.logkei; console.loguser; } } fn; // 输出haha haha KK

建议题主可以先看看闭包的知识点
阮一峰的网络日志—学习闭包

还是要一层层往上查

也可以参考 《Javascript忍者秘籍》里面闭包那一章,感觉比较通俗易懂。

发表评论

电子邮件地址不会被公开。 必填项已用*标注