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
的值。
发件人: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
的值。