返回课程

哪些变量可用?

重要性: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"