将函数赋值给变量 - JS

8
众所周知,下面的代码不会运行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分配给了a()函数吗?


1
()这将调用该函数,并将该函数的返回值分配给x - Rajaprabhu Aravindasamy
1
任何带有括号 () 的内容都会查找该名称的函数/方法并调用它...无论您在哪里编写! - Rayon
2
我们没有调用a()函数 - 是的,你调用了。 - Pointy
2
函数的名称是 a,而不是 a() - Frax
这与面向对象编程无关。 - user663031
2个回答

21

我们刚刚不是把 x 分配给了 a() 函数吗?

不,你是将从 a() 返回的值分配给了 x。

如果你不想调用 a,那么执行以下操作:

var x = a;

而后执行

x();

6
你错了。你正在调用这个函数:
var x = a(); // assigning function to new variable

这行代码的意思是当你写 a() 时调用 a。括号表示调用。

要将函数分配给变量,您只需使用名称,例如:

var x = a;

或者将名称传递给函数 f

f(a)

作为反例,您在下一行代码中调用它并将其传递给g的不是函数而是其执行结果:
g(a())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接