相关疑难解决方法(0)

javaScript中的词法范围/闭包

我理解'js'中的函数具有词法范围(即函数在定义它们时不创建它们的环境(范围).)

function f1() {
    var a = 1;
    f2();
}

function f2() {
    return a;
}
f1(); // a is not defined
Run Code Online (Sandbox Code Playgroud)

当我只运行'f()'时,它返回内部函数.我得到了,这就是"回归"的作用!

function f() {
    var b = "barb";
    return function() {
        return b;
    }
}
console.log(b); //ReferenceError: b is not defined
Run Code Online (Sandbox Code Playgroud)

为什么会出现'ReferenceError:b未定义?' 但是上面的内部函数是不是可以访问它的空间,f()的空间等.由于'b'被返回到全局空间,console.log()不会工作吗?

但是,当我将'f()'分配给一个新变量并运行它时:

 var x = f(); 
 x();// "barb"
 console.log(b); //ReferenceError: b is not defined
Run Code Online (Sandbox Code Playgroud)

这将返回'b',即"barb",但是当你再次运行console.log()时,你会得到'ReferenceError:'b'没有被定义'; 现在不是'b'在全球范围内,因为它已被退回?为什么'x()'也没有像'f()'那样返回内部函数呢?

javascript closures lexical-closures

7
推荐指数
2
解决办法
6599
查看次数

标签 统计

closures ×1

javascript ×1

lexical-closures ×1