函数中的任何函数都形成闭包。闭包总是需要在一个立即调用的函数中吗?
第一个例子是在生命周期内形成闭包,并按预期工作,输出"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()());
发布于 2019-05-17 10:41:00
闭包只是函数与其创建作用域之间的链接,当函数使用来自该作用域的变量时,该链接就存在。
您有这个问题,因为您没有保留闭包:在调用console.log时,您将在每个cat()上重新创建它。
变化
console.log(cat()());
console.log(cat()());转到
let c = cat();
console.log(c());
console.log(c());https://stackoverflow.com/questions/56184749
复制相似问题