基本Javascript:返回函数的函数
这是一个非常基本的javascript问题: 定义函数后:基本Javascript:返回函数的函数,javascript,Javascript,这是一个非常基本的javascript问题: 定义函数后: function a(){ alert("A!"); return function(){ alert("B!") }; } a(); var newFunc = a(); newFunc(); 如果我调用该函数: function a(){ alert("A!"); return function(){ alert("B!") }; } a();
function a(){
alert("A!");
return function(){
alert("B!")
};
}
a();
var newFunc = a();
newFunc();
如果我调用该函数:
function a(){
alert("A!");
return function(){
alert("B!")
};
}
a();
var newFunc = a();
newFunc();
只有“A!”处于警戒状态;
但如果我重新创建一个新函数:
function a(){
alert("A!");
return function(){
alert("B!")
};
}
a();
var newFunc = a();
newFunc();
“A!”和“B!”都会发出警报
有人能解释一下原因吗?
百万泰铢
这是从p78、面向对象JavaScript、Stoyan Stefanov、PACKT PUBLISHING中提取的调用以下命令将执行两个警报:
a()();
正在执行函数
a
,并返回一个函数。但是您没有执行返回的函数
在第二个示例中,这正是您正在执行的操作,但分散在两行中(因此您的代码中有两个
()
)。调用以下命令将执行两个警报:
a()();
正在执行函数
a
,并返回一个函数。但是您没有执行返回的函数
在第二个示例中,这正是您正在做的,但分布在两行中(因此,您的代码中有两个
()
)。返回值就是--一个返回值。它没有被执行
试一下这个吧:
a = a();
a();
返回值就是一个返回值。它没有被执行 试一下这个吧:
a = a();
a();
在第一次调用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'.
在第一次调用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'.
这应该是相当明显的 函数的返回值不会执行,而是返回。当然,返回语句之前的任何内容都将被执行 因此本质上,代码:
var newFunc=a()
将函数a()
(在本例中为匿名函数)的返回值指定给newFunc
。因此,调用newFunc()
将执行返回的匿名函数
您可以使用
var newFunc=a()()强制返回函数在赋值时运行
,它将匿名函数的返回值分配给newFunc
(在本例中为null
,并且警报正在运行)。这应该是相当明显的
函数的返回值不会执行,而是返回。当然,返回语句之前的任何内容都将被执行
因此本质上,代码:var newFunc=a()
将函数a()
(在本例中为匿名函数)的返回值指定给newFunc
。因此,调用newFunc()
将执行返回的匿名函数
您可以使用var newFunc=a()()强制返回函数在赋值时运行
,它将匿名函数的返回值分配给newFunc
(在本例中为null
,并运行警报)。非常简单:
function a()
{
alert("A!");
return function()
{
alert("B!");
};
}
a();
在这种情况下,调用a
,其函数体将发出警报a代码>,然后返回一个函数。返回值(alserts B的函数)被忽略
当你写作时
var newF = a();
newF();
返回的函数被分配给newF
,如果您调用该函数,则可以通过此变量通知B。要一次性完成所有操作,您可以轻松编写:
(a())();
很简单:
function a()
{
alert("A!");
return function()
{
alert("B!");
};
}
a();
在这种情况下,调用a
,其函数体将发出警报a代码>,然后返回一个函数。返回值(alserts B的函数)被忽略
当你写作时
var newF = a();
newF();
返回的函数被分配给newF
,如果您调用该函数,则可以通过此变量通知B。要一次性完成所有操作,您可以轻松编写:
(a())();
第一个示例是a()
,它执行a
函数,该函数执行警报函数并返回函数b
(但不执行)
第二个示例,var newFunc=a()
,执行a
,并将其值保存到变量newFunc
,这意味着它现在等于b
。然后执行newFunc,它会提醒'B!' 您的第一个示例,a()
,执行a
函数,该函数执行警报函数并返回函数b
(但不执行)
第二个示例,var newFunc=a()
,执行a
,并将其值保存到变量newFunc
,这意味着它现在等于b
。然后执行newFunc,它会提醒'B!' 调用时,a会做两件事:
“A!”李>
创建一个提醒“B!”的函数调用时,还返回该函数
您的第一个示例,a()
是对a
的调用,因此它会提醒'a!',创建一个提醒“B!”的函数调用时,返回该函数并丢弃它(因为未使用返回值)
您的第二个示例,var newFunc=a()
与第一个示例类似:它是对a
的调用,提醒'a!',创建通知“B!”的(其他)函数,返回函数,并将返回值分配给newFunc
。现在,newFunc
是对提醒“B!”的函数的引用
最后是代码的最后一行newFunc()代码>调用通知“B!”的函数 调用时,a会做两件事:
“A!”李>
创建一个提醒“B!”的函数调用时,还返回该函数
您的第一个示例,a()
是对a
的调用,因此