关闭总是需要在 IIFE 中吗?

函数内的任何函数都形成一个闭包。闭包总是需要在立即调用的函数中吗?


第一个例子是在 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()());


www说
浏览 117回答 1
1回答

繁星coding

闭包只是函数与创建它的作用域之间的链接,当函数使用该作用域中的变量时存在的链接。你有这个问题是因为你没有保留闭包:你在每次console.log调用时都在重新创建它cat()。改变console.log(cat()());console.log(cat()());进入let c = cat();console.log(c());console.log(c());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript