js匿名函式自執行的好處
阿新 • • 發佈:2020-12-12
我們知道,在建立一個函式時如果要用到變數來存取資訊的話,要儘量使用區域性變數。
因為一方面區域性變數會隨著函式的執行結束被銷燬;另一方面在不執行函式的時候也不會建立這個區域性變數,對節省空間資源有很大的好處。
下面我們來看一個案例:
var num = 1;//全域性變數num
function a() {
console.log(num);
}
function b() {
console.log(num);
}
a(); //呼叫函式a,結果會在控制檯列印1
b(); //呼叫函式b,結果會在控制檯列印1
上面這個案例裡的變數num就是一個典型的全域性變數。
那麼我們要怎麼把num變成區域性變數呢?
方法一:
function a() {
var num = 1;
console.log(num);//列印1
}
function b() {
var num = 1;
console.log(num);
}
a(); //呼叫函式a,結果會在控制檯列印1
b(); //呼叫函式b,結果會在控制檯列印1
上面這種方法雖然解決了全域性變數的問題,但是多次定義相同變數num。使得程式碼冗餘,不夠優化。這種方法不推薦
方法二:
var demo = function() {
var num = 1;
function a() {
console.log(num);
}
function b() {
console.log(num);
}
}
demo(); //呼叫函式demo,獲得函式a、函式b、變數num
a(); //呼叫函式a,結果會在控制檯列印1
b(); //呼叫函式b,結果會在控制檯列印1
上面這種方法二將num、函式a、函式b都寫在一個demo函式裡,這樣就將變數num變成了一個區域性變數,而且函式a和函式b也都可以訪問到變數num
但是,這種方法也有弊端。
- 如果函式demo不執行,就無法獲取函式a、函式b、變數num。
- demo也是一個全域性變數。也就是說我們雖然沒有定義全域性變數num,卻又定義了一個全域性變數demo。顯然這並沒有達到我們最初的目的。
- 每次呼叫函式a和函式b之前都得先呼叫demo,這樣會使程式碼冗餘。萬一我們哪次忘記呼叫demo了怎麼辦呢?
所以,這種也不推薦。
那我們該怎麼辦呢?==>匿名函式自執行
廣州品牌設計公司https://www.houdianzi.com
方法三:匿名函式自執行(推薦)
(function () {
var num = 1;
function a() {
console.log(num);
}
function b() {
console.log(num);
}
a();
b();
})();
匿名函式自執行沒有定義任何一個全域性變數,我們也不用每次先呼叫外面的函式獲取裡面的內容。完美的解決了我們的需求。極力推薦。