1. 程式人生 > >多個js中如何避免方法名重複

多個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(){

alert(n);n++;//或者寫成 alert(n++);},所以c的其實就這個整個b函式。執行c()其實就是執行b(),最後執行三次c()之後我們會發現每一次打印出來n的值分別是99,100,101,這裡其實就驗證了閉包的第二個功能。當我們在函式外部呼叫一個普通的js函式時,當呼叫結束後,js函式裡面的區域性變數的值就會被垃圾回收機制回收釋放,但在這裡卻是從99變成了101,並沒有回收,這是為什麼呢?原因在於a是b的父函式,而b是一個全域性變數,這導致b始終在記憶體中,而b的存在依賴於a,所以導致a也始終在記憶體中,從而導致n變數沒有被回收釋放。至此,閉包的兩大常用功能解析清楚。

下面接著談談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()這種即可。這樣完美的避免了重複的問題。

上面之所以講述了一些閉包的概念,是因為個人確實不理解下面我採用的這種避免方法名重複的方法到底和閉包有何聯絡,如果看到有會的人希望在下面留言解析下,在此謝謝了。