JS閉包總結

來源:互聯網
上載者:User

標籤:nbsp   初始化   bsp   color   結果   logs   記憶體   瞭解   func   

閉包: 有權訪問另一個函數範圍中變數的函數

用處: 1 讀取函數內部的變數
         2 讓某些變數的值始終保持在記憶體中

在瞭解閉包之前,我們需要明白變數的範圍,即函數內部能夠讀取全域變數,但是函數外卻不能讀取函數內的局部變數

1 當使用閉包訪問局部變數

function f1(){    var n = 999;    function f2(){      alert(n);    }    return f2;}var result = f1();result();   // 999

此時f2就是閉包

2 累加

 2.1 使用全域變數累加

 var num = 1; function add(){    num++; } alert(num);   //1 add(); alert(num);   //2 add(); alert(num);  //3

可以達到想要的效果,但是因此帶來的是全域汙染

 2.2 使用局部變數累加

 function add(){    var num =1;    num++;    return num; } alert(add()); //2 alert(add()); //2

輸出的結果每次都是2是因為每次執行add函數時,num又被初始化了

2.3 使用閉包累加

  function add(){    var num = 1;    return function(){        num++;        return num;    }  }  var b= add();  alert(b()); //2  alert(b()); //3

在沒有使用全域變數的情況下,也能實現累加,這裡值得注意的點是:最後是把add()賦值給變數b;而不是直接alert(add()());這裡是可以防止num再一次初始化;

JS閉包總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.