displayName() 内部函数在执行之前从外部函数返回

displayName() inner function is returned from the outer function before being executed

发件人:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

function makeFunc() {
  var name = 'Mozilla';
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc();

What's different (and interesting) is that the displayName() inner function is returned from the outer function before being executed.

外部函数怎么没有执行?外层函数是 makeFunc() , displayName() 是内层函数。我可以看到正在打印“Mozilla”。这是否意味着先执行 makeFunc 然后执行 displayName

我错过了什么?

当您调用 makeFunc 时,您正在创建一个作用域函数 displayName,它可以访问 name 的当前值。然后makeFuncreturns这个函数。它不会被执行,它的处理类似于对象。 您可以传递函数。或者像在上一条语句中那样显式执行它。

makeFunc 被调用并创建 name 变量和 displayName 函数,以及 returns displayName。当您调用 makeFunc 时,它会创建但不会执行内部函数。当您调用 myFunc 时,makeFunc 内部的 name 变量已经消失,但是,由于 displayName 引用了它,myFunc 是一个闭包,它也包含创建闭包时 name 的值。