js的閉包原理理解


問題?什么是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),這時一定要小心,不要隨便
改變父函數內部變量的值。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM