我坚持“返回函数的函数”这个概念。我指的是Stoyan Stefanov的书“面向对象的Javascript”。
代码片段一:
function a() {
alert('A!');
function b(){
alert('B!');
}
return b();
}
var s = a();
alert('break');
s();
输出:
A!
B!
break
代码片段两个
function a() {
alert('A!');
function b(){
alert('B!');
}
return b;
}
var s = a();
alert('break');
s();
输出:
A!
break
B!
有人能告诉我在上面的代码片段中返回b
和b()
的区别吗?
发布于 2011-10-03 07:44:01
将变量赋给函数(不带括号)会复制对该函数的引用。将括号放在函数名的末尾,调用函数,返回函数返回值。
function a() {
alert('A');
}
//alerts 'A', returns undefined
function b() {
alert('B');
return a;
}
//alerts 'B', returns function a
function c() {
alert('C');
return a();
}
//alerts 'C', alerts 'A', returns undefined
alert("Function 'a' returns " + a());
alert("Function 'b' returns " + b());
alert("Function 'c' returns " + c());
在您的示例中,您还将在函数中定义函数。例如:
function d() {
function e() {
alert('E');
}
return e;
}
d()();
//alerts 'E'
该函数仍然是可调用的。它仍然存在。这在JavaScript中一直都在使用。函数可以像其他值一样传递。请考虑以下几点:
function counter() {
var count = 0;
return function() {
alert(count++);
}
}
var count = counter();
count();
count();
count();
函数count可以保留在其外部定义的变量。这称为闭包。它在JavaScript中也被大量使用。
发布于 2011-10-03 07:23:44
返回不带()
的函数名将返回对该函数的引用,可以像使用var s = a()
一样进行赋值。s
现在包含对函数b()
的引用,调用s()
在功能上等同于调用b()
。
// Return a reference to the function b().
// In your example, the reference is assigned to var s
return b;
在return语句中使用()
调用函数将执行该函数,并返回该函数返回的任何值。它类似于调用var x = b();
,但不是分配b()
的返回值,而是从调用函数a()
返回返回值。如果函数b()
本身没有返回值,则在b()
完成任何其他工作后,该调用将返回undefined
。
// Execute function b() and return its value
return b();
// If b() has no return value, this is equivalent to calling b(), followed by
// return undefined;
发布于 2011-10-03 07:26:23
return b();
调用函数b()并返回其结果。
return b;
返回对函数b的引用,您可以将其存储在一个变量中,以便稍后调用。
https://stackoverflow.com/questions/7629891
复制相似问题