[英]Does closure always needs be in 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()());
閉包只是函數與創建它的作用域之間的鏈接,當函數使用該作用域中的變量時,該鏈接存在。
您有這個問題是因為您沒有保留閉包:您在調用cat()
時在每個console.log
重新創建它。
更改
console.log(cat()());
console.log(cat()());
進入
let c = cat();
console.log(c());
console.log(c());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.