首页 > 解决方案 > 理解不同的嵌套函数调用

问题描述

我知道有很多与调用嵌套函数相关的好答案,但我的问题恰好不同。

假设我们有这样的代码

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();?

标签: javascript

解决方案


如果我正确理解了您的问题,那么通过添加括号var d = a();实际上是在调用 function 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返回结果of function b,因此反过来,var d在代码运行时实际上等于 0。如果要将实际函数分配给a变量d,只需像这样删除括号

function a() {
  var c = 0;
  function b() {
    alert(c++);
  }
  return b;
}

var d = a; <-------
d();

它工作得很好。


推荐阅读