輕鬆學習Javascript閉包函數_javascript技巧

來源:互聯網
上載者:User

閉包函數是什麼?在開始學習的閉包的時候,大家很能都比較難理解.就從他的官方解釋來說,都是比較概念化的.

不過我們也還是從閉包的含義出發。
閉包是指函數有自由獨立的變數。換句話說,定義在閉包中的函數可以“記憶”它建立時候的環境。
官方解釋說完後,我們先來看一個簡單計數的例子.

var c = 0;function count(){c++;}count();// 1count();// 2

這個例子是利用了全域變數來實現,但是這裡有個問題是,c這個變數也容易被其他方式所調用,這時候就可能會改變 c 的儲存值.造成這個count計數的失效.那怎麼很好的處理這個問題呢!我們會想到的是使用局部變數的方式來處理.比如:

function count(){ var c = 0; function add(){  c++; } add();}count();// c = 1count();// c = 1

因為這樣建立之後,內部變數只存在於count函數建立執行的時候,執行完之後,整個函數就會被丟棄掉.就無法達到有記憶的能力.那要怎麼來實現呢?那我們就用閉包來解決.我要重新提一次:閉包 = 函數 + 環境

function count(){  var c = 0;  function add(){   c++;  }  return add;}var ct = count();ct(); // c = 1ct(); // c = 2

這個時候我們就可以通過這個閉包來完成計數的能力.ct就是一個閉包函數,內部的環境就是這個局部變數 c. 這裡我們達到的就是內部資料,外部來操作.那閉包除了這個還有什麼其他功能呢?

用閉包類比私人方法
這有點像JAVA的私人方法或者私人變數,只能允許自己來操作!如果外部操作,就需要設定公開的方法來操作.

var person = (function(){  var _name = "編程的人";  var age = 20;  return {   add:function(){     age++;   },   jian:function(){     age--;   },   getAge:function() {     return age;   },   getName:function(){     return _name;   },   setName: function (name) {     _name = name;           }  }})();person.add();var age = person.getAge();console.log(age)person.setName("編程的人公眾號:bianchengderen")console.log(person.getName())

這裡應該很容易理解了吧! 有點物件導向編程的感覺。當然Javascript現在也有物件導向編程的特點.這點我們以後來說明.
目前為止,我們從計數到內部私人化的例子,來說明閉包,希望大家能簡單明白其中的道理,當然閉包還有其他的功能利用是比較方便的。

以上就是本文的全部內容,希望對大家學習javascript程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.