函数内的任何函数均构成闭包。 闭包是否始终需要包含在立即调用的函数中?
第一个示例是在一个iife中形成一个闭包,并按预期方式工作,并给出“ 8”和“ 7”作为输出。
var cat = (function (){
var lives = 9;
return function() {
return --lives;
}
}());
console.log("iife");
console.log(cat());
console.log(cat());
在下面的示例中,闭包无法正常工作,每次都打印相同的值。
var cat = function (){
var lives = 9;
return function() {
return --lives;
}
};
console.log("no iife");
console.log(cat()());
console.log(cat()());
答案 0 :(得分:2)
闭包只是函数与创建它的作用域之间的链接,当函数使用该作用域中的变量时,该链接就存在。
存在此问题是因为您没有保留闭包:您在调用console.log
时每cat()
处都会重新创建它。
更改
console.log(cat()());
console.log(cat()());
进入
let c = cat();
console.log(c());
console.log(c());