日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

沙箱模式以及其使用到的IIFE

發(fā)布時(shí)間:2023/11/29 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 沙箱模式以及其使用到的IIFE 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
//沙箱//與外界隔絕的一個(gè)環(huán)境,外界無法修改該環(huán)境內(nèi)任何信息,沙箱內(nèi)的東西單獨(dú)屬于一個(gè)世界//360沙箱模式//將軟件和操作系統(tǒng)進(jìn)行隔離,以達(dá)到安全的目的//蘋果手的app使用的就是沙箱模式去運(yùn)行//隔離app的空間,每個(gè)app獨(dú)立運(yùn)行//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);})();//為什么要使用立即執(zhí)行函數(shù)表達(dá)式(IIFE)//因?yàn)镮IFE不會(huì)再外界暴露任何的全局變量,但是又可以形成一個(gè)封閉的空間//剛好可以實(shí)現(xiàn)沙箱模式//jQuery當(dāng)中的沙箱模式(function(win){var itcast = {getEle:function () {}}//如果需要在外界暴露一些屬性或者方法,就可以將這些屬性和方法//加到window全局對(duì)象上去//但是這window全局對(duì)象不可以直接引用,因?yàn)橹苯右脮?huì)破壞沙箱原則//所以我們選擇使用傳參的形式將 window對(duì)象 傳入沙箱內(nèi)//此時(shí)沙箱內(nèi)使用window對(duì)象的時(shí)候,不會(huì)再去全局搜索window對(duì)象//而使用的就是沙箱內(nèi)部定義的形參win.itCast = win.$ = itcast;})(window)//沙箱模式一般應(yīng)用在書寫第三方框架//或者為第三方框架書寫插件//或者書寫功能獨(dú)立的一些組件//沙箱模式的優(yōu)勢(shì)//1.沙箱模式使用的是IIFE,不會(huì)再外界暴露任何的全局變量,也就不會(huì)造成全局變量污染//2.沙箱中的所有數(shù)據(jù),都是和外界完全隔離的,外界無法對(duì)其進(jìn)行修改,也就保證了代碼的安全性//js中沙箱模式的實(shí)現(xiàn)原理就是//函數(shù)可以構(gòu)建作用域!上級(jí)作用域不能直接訪問下級(jí)作用域中的數(shù)據(jù)

  

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。