猿问

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

function makeFunc() {

  var name = 'Mozilla';

  function displayName() {

    alert(name);

  }

  return displayName;

}


var myFunc = makeFunc();

myFunc();

不同(且有趣)的是,displayName() 内部函数在执行之前从外部函数返回。


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


我错过了什么?


交互式爱情
浏览 133回答 2
2回答

萧十郎

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

呼如林

当您调用 makeFunc 时,您正在创建一个作用域函数 displayName,它可以访问 name 的当前值。然后 makeFunc 返回这个函数。它不会被执行,它的处理方式与对象类似。您可以传递该函数。或者像在最后一条语句中那样显式执行它。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答