【问题标题】:displayName() inner function is returned from the outer function before being executeddisplayName() 内部函数在执行之前从外部函数返回
【发布时间】:2020-11-02 19:05:21
【问题描述】:

发件人: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();

不同之处(有趣)在于 displayName() 内部函数在执行之前从外部函数返回。

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

我错过了什么?

【问题讨论】:

  • 外部函数正在被执行。您误解了-该段中的“执行之前”是指内部功能,而不是外部功能。
  • @RobinZigmond 我现在明白了。谢谢。

标签: javascript closures


【解决方案1】:

makeFunc 被调用并创建name 变量和displayName 函数,并返回displayName。当您调用makeFunc 时,它会创建但不执行内部函数。当你调用myFunc 时,makeFunc 内部的name 变量已经消失,但是,由于displayName 引用了它,myFunc 是一个闭包,它还保存了闭包时name 的值已创建。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      相关资源
      最近更新 更多