沙箱模式以及其使用到的IIFE
IIFE的用途
? ?嚴(yán)格來講,IIFE并不是閉包,因?yàn)樗⒉粷M足函數(shù)成為閉包的三個(gè)條件。但一般地,人們認(rèn)為IIFE就是閉包,畢竟閉包有多個(gè)定義。
? ? ? ?IIFE一般用于構(gòu)造私有變量,避免全局空間污染
接下來用一個(gè)需求實(shí)現(xiàn)來更直觀地說明IIFE的用途。假設(shè)有一個(gè)需求,每次調(diào)用函數(shù),都返回加1的一個(gè)數(shù)字(數(shù)字初始值為0)
【1】全局變量
一般情況下,我們會(huì)使用全局變量來保存該數(shù)字狀態(tài)
var a = 0; function add(){return ++a; } console.log(add());//1 console.log(add());//2【2】自定義屬性
但上面的方法中,變量a實(shí)際上只和add函數(shù)相關(guān),卻聲明為全局變量,不太合適。
將變量a更改為函數(shù)的自定義屬性更為恰當(dāng)
function add(){return ++add.count; } add.count = 0; console.log(add());//1 console.log(add());//2【3】IIFE
其實(shí)這樣做,還是有問題。有些代碼可能會(huì)無意中將add.count重置
使用IIFE把計(jì)數(shù)器變量保存為私有變量更安全,同時(shí)也可以減少對(duì)全局空間的污染
var add = (function(){var counter = 0;return function(){return ++counter; } })(); console.log(add())//1 console.log(add())//2?
注意事項(xiàng)
執(zhí)行如下代碼會(huì)報(bào)錯(cuò),提示此時(shí)的a是undefined
var a = function(){return 1; } (function(){console.log(a());//報(bào)錯(cuò) })();這是因?yàn)闆]有加分號(hào),瀏覽器將上面代碼解釋成如下所示
var a = function(){return 1; }(function(){console.log(a());//報(bào)錯(cuò) })();如果加上分號(hào),就不會(huì)出錯(cuò)了
var a = function(){return 1; }; (function(){console.log(a());//1 })();?
轉(zhuǎn)載于:https://www.cnblogs.com/zhenguoli/p/8510451.html
總結(jié)
以上是生活随笔為你收集整理的沙箱模式以及其使用到的IIFE的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS-随机生成的密码
- 下一篇: 关于STM32的两个小问题的总结