首頁  >  文章  >  web前端  >  js的閉包原理理解

js的閉包原理理解

黄舟
黄舟原創
2017-02-27 14:41:371312瀏覽

問題?什麼是js(javaScript)的閉包原理,有什麼作用?

一、定義

官方解釋:閉包是一個擁有許多變數和綁定了這些變數的環境的表達式(通常是一個函數),因而這些變數也是該表達式的一部分。


很顯然,丫的。 。 。 。 。啥啊!砸門農村人看不懂! ! !

所以小編的理解是這樣的:****定義在函數中的函數,並且可在外部存取得到。 (正常情況下我們是無法存取局部函數  的)這就有點類似脫了褲子放屁的意思,多此一舉,可是並非多此一舉。閉包肯定有  它的作用的。


作用:1、可以減少全域變數的對象,防止全域變數過去龐大,導致難以維護

   2、防止可修改變量,因為內部的變數外部是無法存取的,也不可修改的。安全性

   3、讀取函數內部的變量,另一個就是讓這些變數的值始終保持在記憶體中。

二、範例:(js程式碼)

#1.Javascript語言的特殊之處,就在於函數內部可以直接讀取全域變數。 

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


2.另一方面,在函數外部自然無法讀取函數內的局部變數。 

 

 function f1(){
    var n=999;
  }
  alert(n); // error


這裡有一個地方要注意,函數內部宣告變數的時候,一定要使用var指令。如果不用的話,你實際上聲明了一個全域變數!

  function f1(){
    n=999;
  }
  f1();
  alert(n); // 999



#**** *如何從外部讀取局部變數? 

我們有時候需要得到函數內的局部變數。但是,前面已經說過了,正常情況下,這是辦不到的,只有透過變通方法才能實現。


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


#三、使用閉套件的注意點 

1)由於閉包會使得函數中的變數都保存在記憶體中,記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在IE中可能導致記憶體外洩。解決方法是,在退出函數之前,將不使用的局部變數全部刪除。 


2)閉包會在父函數外部,改變父函數內部變數的值。所以,如果你把父函數當作物件(object)使用,把閉包當作它的公用方法(Public Method),把內部變數當作它的私有屬性(private value),這時一定要小心,不要隨便
改變父函數內部變數的值。

 以上就是js的閉包原理理解的內容,更多相關內容請關注PHP中文網(www.php.cn )!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn