函数内的任何函数都形成一个闭包。闭包总是需要在立即调用的函数中吗?第一个例子是在 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()());
1 回答

繁星coding
TA贡献1797条经验 获得超4个赞
闭包只是函数与创建它的作用域之间的链接,当函数使用该作用域中的变量时存在的链接。
你有这个问题是因为你没有保留闭包:你在每次console.log调用时都在重新创建它cat()。
改变
console.log(cat()());
console.log(cat()());
进入
let c = cat();
console.log(c());
console.log(c());
添加回答
举报
0/150
提交
取消