哪些变量可用?
重要性:5
下面的 makeWorker
函数创建另一个函数并返回它。这个新函数可以在其他地方调用。
它将访问创建时的外部变量,还是调用时的外部变量,或者两者都访问?
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// create a function
let work = makeWorker();
// call it
work(); // what will it show?
它将显示哪个值?“Pete” 还是 “John”?
答案是:Pete。
下面代码中的 work()
函数通过外部词法环境引用从其来源位置获取 name
。
因此,这里的结果是 "Pete"
。
但是,如果 makeWorker()
中没有 let name
,那么搜索将继续到外部,并从上面的链中可以看到,将获取全局变量。在这种情况下,结果将是 "John"
。