JS - 为变量赋值函数

xco*_*ode 6 javascript

众所周知,以下内容不会运行a()函数,因此不会出现警告框

// 1st
function a() {
  alert('A!');
  return function() {
    alert('B!');
  };
};
Run Code Online (Sandbox Code Playgroud)

我们知道以下代码将运行a()函数警告框'A!' 会出现

// 2nd
function a() {
  alert('A!');
  return function() {
    alert('B!');
  };
};
a(); // calling function
Run Code Online (Sandbox Code Playgroud)

但是,如果我们运行以下代码,将调用a()函数并且警告框'A!' 也会出现,就像上面的第二个代码一样

// 3rd
function a() {
  alert('A!');
  return function() {
    alert('B!');
  };
};
var x = a(); // assigning function to new variable
Run Code Online (Sandbox Code Playgroud)

问题: 为什么会发生这种情况(第3段)?我们还没有调用a()函数(我目前的理解).我们不是只是将x分配给()函数吗?

gur*_*372 11

我们不是只是将x分配给()函数吗?

不,您将返回值从()分配给x.

如果你不想打电话a,那就去吧

var x = a;
Run Code Online (Sandbox Code Playgroud)

后来呢

x();
Run Code Online (Sandbox Code Playgroud)


pid*_*pid 5

你错了。您正在调用该函数:

var x = a(); // assigning function to new variable
Run Code Online (Sandbox Code Playgroud)

这行代码表示a编写时调用a()。括号表示调用。

要将函数分配给变量,您必须仅使用名称,例如:

var x = a;
Run Code Online (Sandbox Code Playgroud)

或将名称传递给函数f

f(a)
Run Code Online (Sandbox Code Playgroud)

作为一个反例,您在下一行代码中调用它,并将g其执行的结果传递给not 函数:

g(a())
Run Code Online (Sandbox Code Playgroud)