我理解'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()'那样返回内部函数呢?