javascript閉包用法例項程式碼分析

admin發表於2017-03-23

閉包在js中具有舉足輕重的地位,對於閉包的恰當應用能夠使其成為一個有力的編碼利器,本章節就通過程式碼例項分析一下閉包的作用,希望能夠給需要的朋友帶來一定的幫助,關於閉包的概念可以參閱javascript閉包概念簡單解析一章節。 

先看一個程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
var obj={
  value:8,
  add:function(num){
    this.value+=(typeof(num)==="number")?num:1;
  }
}
obj.add();
console.log(obj.value);
obj.add(5);
console.log(obj.value);

上面的程式碼執行一切正常,但是有個隱患,你不能保證value的值不會被外部惡意修改,因為value屬性對外部是完全開放的。

程式碼修改如下:

[JavaScript] 純文字檢視 複製程式碼
var obj=(function(){
  var value=8;
  return{
    add:function(num){
      value+=(typeof num === "number")?num:1;
    },
    getValue:function(){
      return value;
    }
  };
})();
obj.add();
console.log(obj.getValue());
obj.add(2);
console.log(obj.getValue());

在以上程式碼中,由於變數value是一個區域性變數,外部不能夠隨意訪問,只能夠通過呼叫add方法的方式修改value的值。

再來看一段程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
var func=function(value){
  return{
    getValue:function(){
      return value;
    }
  }
}
var obj=func("antzone");
console.log(obj.getValue());

以上程式碼也是一個閉包的應用,我們可以看做這裡的value是一個區域性變數,當func()函式執行完畢之後,我們依然可以使用此函式返回的物件訪問此變數。

相關文章