【发布时间】:2018-04-22 03:40:00
【问题描述】:
我对这两个闭包函数感到困惑。
当我将 doSomeMath 分配给变量 test 时,doSomeMath 返回函数而不执行它。它只会在我执行 test(); 时运行闭包函数; 但是,showName 函数并非如此。只要我传入值,它就会立即调用闭包函数而不是返回它。
谁能给我解释一下?谢谢。
function showName (firstName, lastName) {
var nameIntro = "Your name is ";
// this inner function has access to the outer function's variables, including the parameter
function makeFullName () {
var full = nameIntro + firstName + " " + lastName;
return full;
}
return makeFullName ();
}
showName ("Michael", "Jackson"); // Your name is Michael Jackson
function doSomeMath(a, b) {
var a = a;
var b = b;
function multiply() {
var result = a * b;
return result;
}
return multiply;
}
var test = doSomeMath(5,10);
test();
【问题讨论】:
-
我不明白这个问题 - 就像你说的那样。其中一个返回一个函数,另一个返回一个值(立即调用函数的结果)。
-
@CertainPerformance 是的。为什么呢?第一个立即返回值,而第二个返回一个函数
-
return makeFullName ();与return multiply;。您可以看到第一个被调用,而第二个没有。 (但你应该更好地格式化 - 函数名应该紧挨着它们的括号) -
@CertainPerformance 天哪!我一遍又一遍地查看代码并没有注意到这一点。谢谢!!
-
您可能想阅读 MDN 上的 Closures。
标签: javascript closures