哪些变量可用呢?
重要程度: 5
下面的 makeWorker
函数创建了另一个函数并返回该函数。可以在其他地方调用这个新函数。
它是否可以从它被创建的位置或调用位置(或两者)访问外部变量?
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// 创建一个函数
let work = makeWorker();
// 调用它
work(); // 会显示什么?
会显示哪个值?“Pete” 还是 “John”?
答案:Pete.
下方代码中的函数 work()
在其被创建的位置通过外部词法环境引用获取 name
:
所以这里的结果是 "Pete"
。
但如果在 makeWorker()
中没有 let name
,那么将继续向外搜索并最终找到全局变量,正如我们可以从上图中看到的那样。在这种情况下,结果将是 "John"
。