歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

JavaScript閉包函數快速上手

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

不過我們也還是從閉包的含義出發。

閉包是指函數有自由獨立的變量。換句話說,定義在閉包中的函數可以“記憶”它創建時候的環境。

官方解釋說完後,我們先來看一個簡單計數的例子.

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現在也有面向對象編程的特點.這點我們以後來說明.


目前為止,我們從計數到內部私有化的例子,來說明閉包,希望大家能簡單明白其中的道理,當然閉包還有其他的功能利用,是比較方便的.

Copyright © Linux教程網 All Rights Reserved