相关疑难解决方法(0)

JavaScript闭包如何工作?

您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?

我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.

javascript variables closures scope function

7644
推荐指数
82
解决办法
139万
查看次数

JavaScript中的每个函数都是闭包是真的吗?

我知道JavaScript中的每个函数都是一个第一类对象,它有一个内部属性[[scope]],它承载函数自由变量的绑定记录.但是,有两种特殊情况.

  1. Function构造函数创建的函数也是一个闭包吗?Function构造函数创建的函数对象是特殊的,因为它的[[scope]]可能不引用其外部函数的词法环境,而只引用全局上下文.例如,

    var a = 1; 
    var fn = (function outer() {
        var a = 2; 
        var inner = new Function('alert(a); ');
        return inner;
    })();
    fn(); // will alert 1, not 2.
    
    Run Code Online (Sandbox Code Playgroud)

    这是不直观的.这也叫封闭吗?

  2. 如果内部函数没有任何自由变量,我们可以说在创建内部函数时会形成闭包吗?例如,

    // This is a useless case only for academic study
    var fn = (function outer() {
        var localVar1 = 1,
            localVar2 = 2;
        return function() {};
    })();
    
    Run Code Online (Sandbox Code Playgroud)

    在这种情况下,fn指的是作为内部函数创建的空函数对象.它没有自由变量.在这种情况下我们可以说闭合形成了吗?

javascript closures ecmascript-5

8
推荐指数
2
解决办法
1224
查看次数

Chrome devtools 控制台不显示关闭

我正在尝试一个非常基本的 Javascript 闭包示例,但我无法在 Chrome devtools 中将其可视化。请看截图。

我创建了一个全局变量

var p = 3;
Run Code Online (Sandbox Code Playgroud)

和一个函数

function f1() {
    var q = 2; 
    return p+q;
}
Run Code Online (Sandbox Code Playgroud)

这个函数在p里面使用了全局变量,所以这是一个闭包,对吧?如果我的理解不正确,请指导我。

那么,如果这是一个闭包,那么为什么它不在函数作用域中显示为“闭包”呢?

在此处输入图片说明

javascript closures

4
推荐指数
1
解决办法
2092
查看次数

标签 统计

closures ×3

javascript ×3

ecmascript-5 ×1

function ×1

scope ×1

variables ×1