返回函数的JavaScript闭包
我不明白为什么要运行nig返回函数的JavaScript闭包,javascript,closures,Javascript,Closures,我不明白为什么要运行nigvar funB=funcA()仅输出“插孔” 为什么第二句不输出?为什么必须再次运行它才能按预期输出?它可以工作,请尝试运行以下操作: 函数funcA(){ var name=“杰克”; console.log(名称); 返回函数(){ 名称=名称+“加”; console.log(名称); }; } var funB=funcA(); funB() 这意味着funcA被执行,funcA只返回一个匿名函数。调用funcB=funcA()时,如果没有“()”,它将无法执
var funB=funcA()代码>仅输出“插孔”
为什么第二句不输出?为什么必须再次运行它才能按预期输出?它可以工作,请尝试运行以下操作:
函数funcA(){
var name=“杰克”;
console.log(名称);
返回函数(){
名称=名称+“加”;
console.log(名称);
};
}
var funB=funcA();
funB()代码>
这意味着funcA被执行,funcA只返回一个匿名函数。调用funcB=funcA()时,如果没有“()”,它将无法执行此函数代码>它所做的是运行funcA()
即console.log(名称)
然后在第4行为return分配匿名函数。这将返回函数分配给funcB(就像我们做的那样var someName=function(){//do something}
)。因此,要运行该函数,需要调用funcB()代码>
函数funcA(){
var name=“杰克”;
console.log(名称);
返回函数(){
名称=名称+“加”;
console.log(名称);
};
}
var funcB=funcA();
//输出:-插孔
控制台日志(funcB);
/*输出:-f(){
名称=名称+“加”;
console.log(名称);
}
*/
当您调用funcA()“var funB=funcA()”时。它记录“jack”,然后返回一个函数。如果您返回一个函数,它不会首先自动运行它。只有当您称它为“funB();”时才运行它您所说的“编译”是什么意思?您的代码按预期工作。你能更具体地说哪一部分让你困惑吗?让我们忽略funB(),如果我只调用funcA(),结果是“jack”。但是为什么返回语句不起作用呢?我预测它将输出“jackplus”,它确实返回一个函数对象。你预测错了。当您调用控制台时,log
name
仍然是“jack”
,这仅仅是因为return语句到目前为止还没有执行。即使在返回后,您也需要调用一个“thunk”,您已经返回以修改名称变量。明白了!非常感谢。
function funcA(){
var name = "jack";
console.log(name);
return function(){
name = name + " plus";
console.log(name);
};
}
var funB = funcA();
funB()
// expected result: "jack" and "jack plus"
var funB = funcA();