返回函数的JavaScript闭包

返回函数的JavaScript闭包,javascript,closures,Javascript,Closures,我不明白为什么要运行nigvar funB=funcA()仅输出“插孔” 为什么第二句不输出?为什么必须再次运行它才能按预期输出?它可以工作,请尝试运行以下操作: 函数funcA(){ var name=“杰克”; console.log(名称); 返回函数(){ 名称=名称+“加”; console.log(名称); }; } var funB=funcA(); funB() 这意味着funcA被执行,funcA只返回一个匿名函数。调用funcB=funcA()时,如果没有“()”,它将无法执

我不明白为什么要运行nig
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();