返回函数的JavaScript闭包

时间:2017-07-28 07:07:51

标签: javascript closures

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"

我很困惑为什么runnnig var funB = funcA();只输出"jack"

为什么第二句输出没有?为什么必须第二次按预期输出?

4 个答案:

答案 0 :(得分:0)

它有效,尝试运行:



function funcA(){
  var name = "jack";
  console.log(name);
  return function(){
    name = name + " plus";
    console.log(name);
  };
}
var funB = funcA();
funB();




答案 1 :(得分:0)

var funB = funcA();

表示执行funcA,而funcA只返回匿名函数。没有“()”,它将不会执行此功能。

答案 2 :(得分:0)

当你调用funcB = funcA();时它运行funcA()console.log(name);,然后在第4行返回匿名函数返回。这将返回函数赋给funcB(就像我们一样)做var someName = function(){ // do something})。因此,要运行该功能,您需要调用funcB();



function funcA(){
        var name = "jack";
        console.log(name);
        return function(){
            name = name + " plus";
            console.log(name);
        };
    }
    
    var funcB = funcA();
    //Output:- jack

    console.log(funcB);
    /*Output:- f (){
                   name = name + " plus";
                   console.log(name);
               }
    */




答案 3 :(得分:0)

当你调用funcA()" var funB = funcA()"。它记录" jack"然后它返回一个函数。如果返回一个函数,它不会自动先运行它。你只能在调用它时运行它" funB();"。