【发布时间】:2019-09-28 14:05:28
【问题描述】:
我有以下代码:
function doStuff() {
var increaseNumber = 0;
function doSomeStuff() {
console.log(++increaseNumber);
}
return doSomeStuff();
};
doStuff();
当执行函数“doStuff”时,函数“doStuff”内部的函数“doSomeStuff”通过“return doSomeStuff()”被触发,并且每次调用变量“increaseNumber”时都会增加1。如果我改变“return doSomeStuff();”要“return doSomeStuff;”,通过“doStuff()”调用“doStuff”是行不通的,正如我所假设的那样。
此外,我有以下代码,它产生与前面代码相同的结果:
var doStuff = (function () {
var increaseNumber = 0;
function doSomeStuff() {
console.log(++increaseNumber);
}
return doSomeStuff;
})();
doStuff();
在此代码中,IIFE 存储在变量“doStuff”中。在 IIFE 中,存储了函数“doSomeStuff”,并且显然是通过“return doSomeStuff”触发的,并且每次通过“doStuff()”调用变量“increaseNumber”时都会增加 1。 当我更改“return doSomeStuff;”时到“return doSomeStuff();”,代码不再按布局工作。
时间:
return doSomeStuff();
})();
//doStuff();
IIFE 和“doSomeStuff”执行一次,并且 increaseNumber = 1。通过“doStuff()”进一步调用 IIFE 不起作用,因为错误:“JavaScript 错误:doStuff 不是函数”。
这里主要有两点不明白:
- 为什么当“return doSomeStuff;”时代码可以工作。我看不出这是如何触发函数“doSomeStuff”的,因为缺少 ()。当我调用一个函数时,我确保添加 ()。我就是这么学的。
- 高于一切:为什么当我更改“return doSomeStuff;”时不能将“doStuff”作为函数调用要“返回 doSomeStuff();”?
你会注意到我还是一个 Javascript 新手。我希望我不会在这里重复一个问题(老实说,我无法通过搜索或在 Google 上找到任何可以回答我的问题的内容)。
感谢一百万的任何提示。
【问题讨论】:
标签: javascript iife