与我阅读的文章一样多,我仍然有一些问题。
我已经知道(并理解)闭包的用法,例如:
臭名昭著的循环问题(链接循环,每个链接都带有警报,并保持编号)
增加的计数器(继续调用一个函数 -> 提醒增加的数字)
从这里:
引用其外部函数的局部变量的内部函数创建闭包
从这里:
闭包是函数的局部变量 - 在函数返回后保持活动状态,或者闭包是在函数返回时未释放的堆栈帧。(好像“堆栈帧”被分配而不是在堆栈上!)
请教3个问题:
问题 #1
有人告诉我,JS 中的所有函数都会创建闭包。
什么???如果我创建一个带有私有变量的普通函数,它只会创建一个范围。不关闭。
我认为关闭是这样的:(从这里开始)
- 制作一个外部的“功能制造商”功能。
- 在其中声明一个局部变量。
- 在外部函数内部声明一个内部函数。
- 在内部函数中使用外部函数的变量。
- 让外部函数返回内部函数
- 运行该函数,并将其返回值分配给一个变量
示例:
function functionMaker(){
var x = 1;
function innerFunction(){
alert(x);
x++;
}
return innerFunction;
}
那么为什么他们说每个 js 函数都会创建闭包呢?
问题2
又名IEFA Self-Invoking Functions
-Immediately Invoked Function Expression
创建一个闭包吗?
看着
(function (a) {
alert(a);
})(4);
我看不到上面的6 条规则这样的模式:这里到底在哪里Have the outer function return the inner function
?我没有看到这个词return
。
问题 #3
function myFunction() {
var myVar = 1;
var alertMyVar = function () {
alert('My variable has the value ' + myVar);
};
setTimeout(alertMyVar, 1000 * 3600 * 24);
}
myFunction();
难道myFunction
在这里活了一整天?或者它在之后就结束了setTimeout
?如果是这样,如何SetTimeOut
记住该值?
请帮我把它做对。