在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ 關(guān)于IIFE能保持變量私有和污染全局變量的問(wèn)題

關(guān)于IIFE能保持變量私有和污染全局變量的問(wèn)題

在學(xué)習(xí)JS的IIFE的時(shí)候,看到很多教程都說(shuō)IIFE可以保持變量的私有。例如

(function foo() {
  var b = 7;
})();
console.log(b); // referenceError

在函數(shù)外無(wú)法訪問(wèn)變量b。但是這里用正常的函數(shù)聲明,不是也能達(dá)到同樣的效果嗎?

另外還看到有教程都說(shuō)IIFE可以防止pollute global variables。比如

var b = 5;

(function foo() {
  var b = 7;
})();

console.log(b); // 5

但是正常的函數(shù)聲明,不是也能達(dá)到同樣的效果嗎?

我不理解IIFE在這兩個(gè)方面有比正常的函數(shù)聲明有什么優(yōu)勢(shì)

回答
編輯回答
避風(fēng)港
在學(xué)習(xí)JS的IIFE的時(shí)候,看到很多教程都說(shuō)IIFE可以保持變量的私有。

這里要對(duì)比的是

var a = 1;
//和
(function foo() {
  var a = 1;
})();

而不是對(duì)比立即執(zhí)行函數(shù)表達(dá)式函數(shù)聲明或者函數(shù)表達(dá)式執(zhí)行的區(qū)別,他并不是一個(gè)高階函數(shù),函數(shù)作用域都是一樣的,他只是立即執(zhí)行而已。

2018年8月18日 16:49
編輯回答
吃藕丑

在樓主的代碼里,IIFE避免污染了全局變量foo。
而直接聲明會(huì)創(chuàng)建一個(gè)foo的全局變量。

關(guān)于私有變量的問(wèn)題,其他回答已經(jīng)非常精彩,就不再贅述了。

2017年9月30日 05:01
編輯回答
乖乖瀦

普通函數(shù)聲明以后你得自己調(diào)用一次,另外這個(gè)函數(shù)本身也是相當(dāng)于全局空間的變量,最后對(duì)于普通函數(shù)也是可以通過(guò)閉包是可以拿到函數(shù)里面的變量的

2017年10月31日 02:19