就像我读过的文章一样多,我仍然有一些问题。Javascript关闭说明?
我已经知道(和理解)关闭的像用法:
臭名昭著的循环问题(与保持数量与戒备在他们中的每一个环节环)
增加计数器(继续呼叫功能 - >哪些提醒增加数字)
从here:
内部函数指的是其外部函数 的局部变量创建封闭
从here:
的封闭为函数的局部变量 - 在 函数返回之后保持活动状态,或者闭包是一个不是 的分配栈d函数返回时。 (就好象一个 '堆栈帧' 是 malloc分配的而不是在堆栈上!)
3个问题请:
问题#1
有人告诉我,所有的JS中的函数创建闭包。
什么 ???如果我用私有变量创建一个正常的函数,它只是创建一个范围。不关闭。
我觉得这样封闭工作:(from here)
- 制作外, “功能机” 的功能。
- 在其中声明一个局部变量。
- 在外部声明一个内部函数。
- 在内部函数中使用外部函数的变量。
- 有外部函数返回的内部函数
- 运行的功能,它的返回值赋值给一个变量
exmample:
function functionMaker(){
var x = 1;
function innerFunction(){
alert(x);
x++;
}
return innerFunction;
}
那么,为什么他们说每个js函数创建闭包?
问题2
是否Self-Invoking Functions
又名IEFA - 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
想起价值?
请帮我得到它的权利。
感谢。它与我的第3个问题有关吗? '在函数调用的生命周期之外? –
记住:JavaScript的IIFEs必须有括号:'(函数(){})();' –
@WaleedKhan不,那是不正确的。只需要消除'function'关键字的歧义。在'='表达式的右边没有歧义,所以括号不是必需的。 – Pointy