沙箱模式以及其使用到的IIFE
生活随笔
收集整理的這篇文章主要介紹了
沙箱模式以及其使用到的IIFE
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//沙箱//與外界隔絕的一個環境,外界無法修改該環境內任何信息,沙箱內的東西單獨屬于一個世界//360沙箱模式//將軟件和操作系統進行隔離,以達到安全的目的//蘋果手的app使用的就是沙箱模式去運行//隔離app的空間,每個app獨立運行//JS中的沙箱模式//沙箱模式的基本模型// (function(){
// var a = 123;
// })();var sum = 0;for(var i = 1; i<=100;i++){sum+=i;}console.log(sum);var a =123;(function(){//在沙箱中將所有變量的定義放在最上方//中間就放一些邏輯代碼//最后,如果需要,就給外界暴露一些成員(通過window)var sum = 0;for(var i = 1; i<=100;i++){sum+=i;}console.log(sum);})();//為什么要使用立即執行函數表達式(IIFE)//因為IIFE不會再外界暴露任何的全局變量,但是又可以形成一個封閉的空間//剛好可以實現沙箱模式//jQuery當中的沙箱模式(function(win){var itcast = {getEle:function () {}}//如果需要在外界暴露一些屬性或者方法,就可以將這些屬性和方法//加到window全局對象上去//但是這window全局對象不可以直接引用,因為直接引用會破壞沙箱原則//所以我們選擇使用傳參的形式將 window對象 傳入沙箱內//此時沙箱內使用window對象的時候,不會再去全局搜索window對象//而使用的就是沙箱內部定義的形參win.itCast = win.$ = itcast;})(window)//沙箱模式一般應用在書寫第三方框架//或者為第三方框架書寫插件//或者書寫功能獨立的一些組件//沙箱模式的優勢//1.沙箱模式使用的是IIFE,不會再外界暴露任何的全局變量,也就不會造成全局變量污染//2.沙箱中的所有數據,都是和外界完全隔離的,外界無法對其進行修改,也就保證了代碼的安全性//js中沙箱模式的實現原理就是//函數可以構建作用域!上級作用域不能直接訪問下級作用域中的數據
IIFE的用途
? ?嚴格來講,IIFE并不是閉包,因為它并不滿足函數成為閉包的三個條件。但一般地,人們認為IIFE就是閉包,畢竟閉包有多個定義。
? ? ? ?IIFE一般用于構造私有變量,避免全局空間污染
接下來用一個需求實現來更直觀地說明IIFE的用途。假設有一個需求,每次調用函數,都返回加1的一個數字(數字初始值為0)
【1】全局變量
一般情況下,我們會使用全局變量來保存該數字狀態
var a = 0; function add(){return ++a; } console.log(add());//1 console.log(add());//2【2】自定義屬性
但上面的方法中,變量a實際上只和add函數相關,卻聲明為全局變量,不太合適。
將變量a更改為函數的自定義屬性更為恰當
function add(){return ++add.count; } add.count = 0; console.log(add());//1 console.log(add());//2【3】IIFE
其實這樣做,還是有問題。有些代碼可能會無意中將add.count重置
使用IIFE把計數器變量保存為私有變量更安全,同時也可以減少對全局空間的污染
var add = (function(){var counter = 0;return function(){return ++counter; } })(); console.log(add())//1 console.log(add())//2?
注意事項
執行如下代碼會報錯,提示此時的a是undefined
var a = function(){return 1; } (function(){console.log(a());//報錯 })();這是因為沒有加分號,瀏覽器將上面代碼解釋成如下所示
var a = function(){return 1; }(function(){console.log(a());//報錯 })();如果加上分號,就不會出錯了
var a = function(){return 1; }; (function(){console.log(a());//1 })();?
轉載于:https://www.cnblogs.com/zhenguoli/p/8510451.html
總結
以上是生活随笔為你收集整理的沙箱模式以及其使用到的IIFE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS-随机生成的密码
- 下一篇: 经常梦到孩子丢了是什么征兆