簡體   English   中英

是否總是需要在IIFE中關閉?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM