为了账号安全,请及时绑定邮箱和手机立即绑定

关闭总是需要在 IIFE 中吗?

关闭总是需要在 IIFE 中吗?

www说 2021-06-01 09:02:07
函数内的任何函数都形成一个闭包。闭包总是需要在立即调用的函数中吗?第一个例子是在 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());


查看完整回答
反对 回复 2021-06-03
  • 1 回答
  • 0 关注
  • 116 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信