javascript - 理解不同的嵌套函数调用
问题描述
我知道有很多与调用嵌套函数相关的好答案,但我的问题恰好不同。
假设我们有这样的代码
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();?
解决方案
如果我正确理解了您的问题,那么通过添加括号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();
它工作得很好。
推荐阅读
- javascript - 在这里,我有商店和用户的纬度和经度,我想按顺序显示商店列表
- elasticsearch - 如何在使用外部版本控制时更新 ElasticSearch 中的文档
- reactjs - 错误:将 react redux 从 5 升级到 7 后 - 浏览器控制台中的错误:在“Connect(Compo) 的上下文中找不到“store”
- python - Dnspython-如何创建 PTR dns crecord?
- python - 尝试从 python 连接 Hive 时出现错误“UnicodeError:标签太长”
- python - RE: 如何在 python 中制作流畅的动画
- node.js - 更改 cronjob 写入的路径
- flutter - Flutter 小部件在 2.0 版中不可用
- javascript - Oracle Apex 图表 - 刷新时重置缩放级别
- sharepoint - 如何从数据库中获取 Project server 2016 中的基线 X 日期?