2 回答

TA貢獻1853條經(jīng)驗 獲得超6個贊
這么做是的目的為了防止變量污染或者不想讓外部訪問從而保護變量,這里的做法的術(shù)語叫立即執(zhí)行函數(shù)。實例:
//比如在某個a.js文件有個變量名叫$(jquery暴露出來的對象就叫$);
//然后你在引入這個js文件后又引入一個b.js,內(nèi)容如下:
var $ = 'I am b.js';
console.log($)
//然后又在b.js后引入c.js,內(nèi)容如下:
var $el = $('xxx'); //當(dāng)你試圖使用a.js中$下的方法時,發(fā)現(xiàn)報錯了,因為$被b.js重新賦值了
解決辦法就是讓b.js的變量被包裹起來:
(function(){
var $ = 'I am b.js';
console.log($)
})()
由于在b.js的變量被函數(shù)的作用域包裹起來了,不能被外部訪問到,所以c.js訪問的是在全局作用域的$,就能按預(yù)期拿到$,又不影響b.js的正常執(zhí)行。
另外簡單的解釋一下立即執(zhí)行函數(shù):
//第一個括號的作用是輸出一個函數(shù)
var b = (function(){var $="b.js";console.log($)})
console.log(b); // =>? (){var $="b.js";console.log($)}
//第二個括號是執(zhí)行這個方法,相當(dāng)于:
b() // =>(function(){var $="b.js";console.log($)})()

TA貢獻1780條經(jīng)驗 獲得超4個贊
添加回答
舉報