基本Javascript:返回函数的函数

时间:2013-11-18 10:38:24

标签: javascript

这是一个非常基本的JavaScript问题:

定义函数后:

function a(){
    alert("A!");
    return function(){
        alert("B!")
    };
}

如果我调用该函数:

a();

只有“A!”很警觉; 但是,如果我重新创建一个新功能:

var newFunc = a();
newFunc();

两者都是“A!”和“B!”警报。

有人可以解释原因吗? 百万THX !!

这是从p78,面向对象的JavaScript,Stoyan Stefanov,PACKT PUBLISHING

中提取的

8 个答案:

答案 0 :(得分:4)

调用以下内容将执行两个警报:

a()();

http://jsfiddle.net/pKLNW/


您的函数a正在执行,并返回一个函数。但是你没有执行返回的函数。

在你的第二个例子中,这正是你正在做的事情,但是分成两行(因此你的代码中有两个())。

答案 1 :(得分:1)

这很简单:

function a()
{
    alert("A!");
    return function()
    {
        alert("B!");
    };
}
a();

在这种情况下,您调用a,其功能正文提醒A!,然后返回一个函数。返回值(插入B的函数)完全被忽略。

写作时

var newF = a();
newF();

返回的函数被分配给newF,如果你调用该函数,那么,通过这个变量,你可以提醒B.要一次性完成所有操作,你可以轻松地写下:

(a())();

答案 2 :(得分:0)

返回值就是 - return 值。它没有被执行。

试试这个很有趣:

a = a();
a();

答案 3 :(得分:0)

在第一次调用a();你正在调用该函数,它返回另一个函数。但你不称它为 在第二个示例中,您调用函数并将返回值(它返回的函数)存储在变量中,然后调用它,这将调用返回的函数。

function a() {
  alert("A!"); //This will be called when the function a is called.
  //After the alert another function is returned:
  return function(){
    //and if this function is called, it will:
    alert("B!");
  }
}

a(); //Calls a, but do nothing with return value.  

a()(); //Calls a and directly calls the return value after.  

var b = a(); //Calls a and stores return value in variable 'b'
b(); //calls 'b', which is the return value of 'a'.

答案 4 :(得分:0)

应该是相当明显的。

不执行函数的返回值,而是返回。返回陈述之前的任何内容当然都会被执行。

基本上,代码:var newFunc = a();将函数a()(在本例中为匿名函数)的返回值赋给newFunc。因此,调用newFunc()将执行返回的匿名函数。

您可以使用var newFunc = a()();强制返回的函数在赋值时运行,newFunc将匿名函数的返回值分配给null(在本例中为{{1}},并且警报正在运行)。

答案 5 :(得分:0)

您的第一个示例a()执行a函数,该函数执行警报函数并返回函数b(但不执行它)。

第二个示例var newFunc = a()执行a,并将其值保存到变量newFunc,这意味着它现在等于b。然后执行newFunc,它会发出'B!'警告。

答案 6 :(得分:0)

调用时,a会做两件事:

  1. 提醒'A!'
  2. 创建一个警告'B!'的功能在被调用时也会返回该函数。
  3. 您的第一个示例a()是对a的调用,因此它会警告“A!”,创建一个警告“B!”的函数。当被调用时返回该函数并将其丢弃(因为未使用返回的值)。

    你的第二个例子var newFunc = a()与第一个例子类似:它是对a的调用,警告'A!',创建一个警告'B!'的(另一个)函数,返回函数和返回值分配给newFunc。现在newFunc是对提醒'B!'的函数的引用。

    最后,代码的最后一行newFunc();调用警告“B!”的函数。

答案 7 :(得分:0)

当你这样做时:

var newFunc = a();

执行一个执行,所以“A!”警报,并将返回值赋值给变量newFunc:

newfunc = function(){ alert("B!"); }

所以当你执行newfunc时,“B!”警报。

参考: Functions that return a function - Javascript