首頁 > web前端 > js教程 > 主體

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

WBOY
發布: 2016-05-16 15:25:40
原創
910 人瀏覽過

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

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

var c = 0;
function count(){
c++;
}
count();// 1
count();// 2
登入後複製

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

function count(){
 var c = 0;
 function add(){
  c++;
 }
 add();
}
count();// c = 1
count();// c = 1
登入後複製

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

function count(){
  var c = 0;
  function add(){
   c++;
  }
  return add;
}
var ct = count();
ct(); // c = 1
ct(); // 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程式設計有所幫助。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!