我知道有很多与调用嵌套函数有关的好答案,但是我的问题恰好不同。
假设我们有这样的代码
function a() {
var c = 0;
function b() {
alert(c++);
}
return b;
}
var d = a();
d();
在这里,我们做了return b
,然后
var d = a();
d();
调用它,即它仅在我们执行d();
时运行,但代码几乎相同
function a() {
var c = 0;
function b() {
alert(c++);
}
return b();
}
var d = a();
在return b();
做的地方,我们可以直接通过var d = a();
调用它,而不必调用d();
,为什么会这样呢?我知道return b和return b()的区别正在起作用,但是仍然有人可以解释为什么,我们可以直接通过var d = a();
调用它,而不必调用`d();吗?
答案 0 :(得分:1)
如果我正确理解了您的问题,那是在通过在var d = a();
上加上括号而实际上是在调用函数a
。运行代码时
function a() {
var c = 0;
function b() {
alert(c++);
}
return b();
}
var d = a();
d();
它给出了一个错误,并且发生的是d不是一个函数,当您将a()
分配给var d
时,您正在分配a()的结果 ,它在function a
中将返回a的结果,因为return b()
实际上正在调用function b
,该结果返回function b
的结果,因此反过来,运行代码时var d
实际上等于0。如果您想将实际功能a
分配给变量d
,只需删除这样的括号
function a() {
var c = 0;
function b() {
alert(c++);
}
return b;
}
var d = a; <-------
d();
它很好用。
答案 1 :(得分:0)
我们可以直接通过var d = a()来调用它;并且不需要调用`d();?
您不只是“不需要呼叫”-您不能呼叫“ d();”
(如果函数b的返回值不是函数)
但是为什么?
因为您已将函数a的返回值分配给变量d。 返回值“ a”(不幸的是)是函数“ b”的返回值。
现在,如果函数“ b”的返回值不是函数(我想不是),那么您将把“ d”分配给对象或int或除函数外的其他所有东西,其中“ d( );“将是无效的操作。
答案 2 :(得分:0)
返回“ b”时,返回函数引用。
返回“ b()”时,将调用该函数并返回结果。
You can easy map this to the ajax:
function onSuccess() {
...
}
$.ajax(url, onSuccess);
您将引用传递给该函数,该函数将在ajax完成后被调用。
但这是
$.ajax(url, onSuccess());
您立即调用onSuccess并将结果传递给函数。