众所周知,以下不会运行a()函数,因此警告框不会出现
// 1st
function a() {
alert('A!');
return function() {
alert('B!');
};
};
我们知道以下代码将运行a()函数和警告框'A!'将出现
// 2nd
function a() {
alert('A!');
return function() {
alert('B!');
};
};
a(); // calling function
但是,如果我们运行以下代码, a()函数将被调用和警告框'A!'也会出现,就像上面的第二个代码
一样
// 3rd
function a() {
alert('A!');
return function() {
alert('B!');
};
};
var x = a(); // assigning function to new variable
问题: 为什么会发生这种情况(第3段)?我们还没有调用a()函数(我目前的理解)。我们不是只是将x分配给()函数吗?。
答案 0 :(得分:10)
我们只是将x分配给()函数吗?。
不,您已将()的返回值分配给x。
如果您不想致电a
,请执行
var x = a;
以后再做
x();
答案 1 :(得分:4)
你错了。您正在调用该函数:
var x = a(); // assigning function to new variable
这行代码表示在编写a
时调用a()
。括号表示调用。
要为变量分配函数,您只需使用名称,例如:
var x = a;
或将名称传递给函数f
:
f(a)
作为一个反例,你在下一行代码中调用它并传递给g
而不是函数是执行的结果:
g(a())