函数执行环境

clipboard.png

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

阅读 3.8k
7 个回答

这个叫做作用域链 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.log(kei);
        var user = "KK";
        return function(){
            console.log(kei);
            console.log(user);
        }
    }
    fn()();  // 输出haha  haha KK

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

还是要一层层往上查

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

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