1. 程式人生 > >js閉包之應用場景

js閉包之應用場景

泄露 應用場景 bject 作用 nbsp 方法 函數表達式 激活 參數

閉包的解釋

一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。閉包是指有權訪問另一個函數作用域的變量的函數

在javascript中,只有函數內部的子函數才能讀取局部變量,所以說,閉包可以簡單理解成“定義在一個函數內部的函數“。所以,在本質上,閉包是將函數內部和函數外部連接起來的橋梁。

  閉包的特點:

  1) 作為一個函數變量的一個引用,當函數返回時,其處於激活狀態。
  2) 一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。
  簡單的說,javascript允許使用內部函數---即函數定義和函數表達式位於另一個函數的函數體內。而且,這些內部函數可以訪問它們所在的外部函數中聲明的所有局部變量、參數和聲明的其他內部函數。當其中一個這樣的內部函數在包含它們的外部函數之外被調用時,就會形成閉包。

閉包應用場景

1.setTimeout

setTimeout(func,time)這裏的func不能帶參數,解決這個問題需要用閉包

function func(param) {
    return function() {
        alert(param);
    }
}
var f = func(1)
setTimeout(f, 1000);

2.代替全局變量

//閉包,test2是局部變量,這是閉包的目的
//我們經常在小範圍使用全局變量,這個時候就可以使用閉包來代替。
(function(){
var test2=222;
function outer(){
    alert(test2);
}
function test(){ alert("測試閉包:"+test2); } outer(); //222 test(); //測試閉包:222 } )(); alert(test2); //未定義,這裏就訪問不到test2

3.為節點循環綁定click事件,在事件函數中使用當次循環的值或節點,而不是最後一次循環的值或節點

4.創建特權方法用於訪問控制

使用閉包的註意點

(1)由於閉包會使得函數中的變量都被保存在內存中,內存消耗很大,所以不能濫用閉包,否則會造成網頁的性能問題,在IE中可能導致內存泄露。解決方法是,在退出函數之前,將不使用的局部變量全部刪除。

(2)閉包會在父函數外部,改變父函數內部變量的值。所以,如果你把父函數當作對象(object)使用,把閉包當作它的公用方法(Public Method),把內部變量當作它的私有屬性(private value),這時一定要小心,不要隨便改變父函數內部變量的值。

js閉包之應用場景