我們知道,在創建一個函數時如果要用到變數來存取信息的話,要儘量使用局部變數。 因為一方面局部變數會隨著函數的執行結束被銷毀;另一方面在不執行函數的時候也不會創建這個局部變數,對節省空間資源有很大的好處。 下麵我們來看一個案例: 上面這個案例里的變數num就是一個典型的全局變數。 那麼我們要怎麼把nu ...
我們知道,在創建一個函數時如果要用到變數來存取信息的話,要儘量使用局部變數。
因為一方面局部變數會隨著函數的執行結束被銷毀;另一方面在不執行函數的時候也不會創建這個局部變數,對節省空間資源有很大的好處。
下麵我們來看一個案例:
1 var num = 1; //全局變數num
2
3 function a() {
4 console.log(num);
5 }
6
7 function b() {
8 console.log(num);
9 }
10
11 a(); //調用函數a,結果會在控制台列印1
12 b(); //調用函數b,結果會在控制台列印1
上面這個案例里的變數num就是一個典型的全局變數。
那麼我們要怎麼把num變成局部變數呢?
方法一:
1 function a() {
2 var num = 1;
3 console.log(num); //列印1
4 }
5
6 function b() {
7 var num = 1;
8 console.log(num);
9 }
10
11 a(); //調用函數a,結果會在控制台列印1
12 b(); //調用函數b,結果會在控制台列印1
上面這種方法雖然解決了全局變數的問題,但是多次定義相同變數num。使得代碼冗餘,不夠優化。這種方法不推薦
方法二:
1 var demo = function() {
2 var num = 1;
3
4 function a() {
5 console.log(num);
6 }
7
8 function b() {
9 console.log(num);
10 }
11 }
12
13 demo(); //調用函數demo,獲得函數a、函數b、變數num
14 a(); //調用函數a,結果會在控制台列印1
15 b(); //調用函數b,結果會在控制台列印1
上面這種方法二將num、函數a、函數b都寫在一個demo函數里,這樣就將變數num變成了一個局部變數,而且函數a和函數b也都可以訪問到變數num
但是,這種方法也有弊端。
- 如果函數demo不執行,就無法獲取函數a、函數b、變數num。
- demo也是一個全局變數。也就是說我們雖然沒有定義全局變數num,卻又定義了一個全局變數demo。顯然這並沒有達到我們最初的目的。
- 每次調用函數a和函數b之前都得先調用demo,這樣會使代碼冗餘。萬一我們哪次忘記調用demo了怎麼辦呢?
所以,這種也不推薦。
那我們該怎麼辦呢?==>匿名函數自執行
方法三:匿名函數自執行(推薦)
1 (function () {
2 var num = 1;
3
4 function a() {
5 console.log(num);
6 }
7
8 function b() {
9 console.log(num);
10 }
11
12 a();
13 b();
14 })();
匿名函數自執行沒有定義任何一個全局變數,我們也不用每次先調用外面的函數獲取裡面的內容。完美的解決了我們的需求。極力推薦。
寫在後面:
什麼是匿名函數?什麼是函數自執行?匿名函數還有其他好的應用?或許我的其他博客https://www.cnblogs.com/CurryLi/ 可以幫到你哦,歡迎您的到來。