多個js中如何避免方法名重複
我想很多人面試的時候都會遇到這個問題,在最開始進入it行業的時候其實我也不懂該怎麼回答,後來很多人告訴我用閉包,然後再有面試我就直接回答閉包,但其實我自己並不是太明白閉包的概念,也根本不瞭解它是如何來防止方法名的重複,下面我就簡單講解下我所瞭解的。
先談談閉包的概念,其實閉包就是能夠讀取其他函式內部區域性變數的函式,由於在js函式中,只有函式內部的函式才可以讀取區域性變數,因此可以把閉包簡單的理解為定義在一個函式內部的函式。下面用一個例子簡單驗證閉包的2大主要功能。1,讀取函式內部變數。2,讓這些變數的值始終在記憶體中。
例子:
function a(){
var n = 99;
function b(){
alert(n);
n++;
//或者寫成 alert(n++);
}
return b;
}
通過例項我們可以很簡單的發現,n是a函式內部的一個區域性變數,我們在函式外部是無法讀取n的,但是在內部函式b中卻可以讀取,這就驗證了閉包的第一個功能,讀取函式內部變數。下面我們通過一些列印語句來驗證其第二個功能。
var c = a();
c();
c();
c();我來簡單解析下這四句話:var c = a();其實就是把b的值賦值給c,這裡的b是一個方法名,很多人可能覺得這裡會有錯誤,其實是沒有任何錯誤的,不信的可以自己去嘗試下。這裡的b我們用alert(b)打印出來的其實就是function b(){
下面接著談談js檔案重名檔案:
避免多個js方法名重合的最簡單方法就是:採用類來封裝js頁碼。基礎寫法如下“
var wdh = (function($){
var _this = {};
//定義變數
_this.a = '';
_this.b = '';
//定義方法
_this.c = function(){
}
_this.d =function(){}
return _this;
})(JQuery);
因為返回了_this,所以在其他地方呼叫時只需要用wdh.a wdh.c()這種即可。這樣完美的避免了重複的問題。
上面之所以講述了一些閉包的概念,是因為個人確實不理解下面我採用的這種避免方法名重複的方法到底和閉包有何聯絡,如果看到有會的人希望在下面留言解析下,在此謝謝了。