首頁 >web前端 >js教程 >js閉包有什麼用? js閉包的用法實例(附程式碼)

js閉包有什麼用? js閉包的用法實例(附程式碼)

不言
不言原創
2018-08-23 11:38:341446瀏覽

這篇文章帶給大家的內容是關於js閉包有什麼用? js閉包的用法實例(附程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

Js語言在函數內部可以直接讀取全域變量,但函數外部無法讀取函數內的局部變數

<script type="text/javascript">
var n=100;
function parent(){
  alert(n);
}
parent();//100
</script>

<script type="text/javascript">
function parent(){
  var m=50;
}
parent();
alert(m);//报错 m未定义
</script>

註:函數內部宣告變數時一定要加var ,否則就宣告了一個全域變數

function parent(){

m=50;

}

parent();

alert(m);//50

有時,需要得到函數內部的的局部變量,就需要變通的方法實現利用js變數作用域的特點,如在函數內部定義子函數,對於子函數來說,父函數就是它的全局,子函數可以存取父函數裡的變數(對於整個js程式碼來說又是局部變數)

<script type="text/javascript">
function parent(){
   var m=50;
   function son(){
        alert(m);
   }
   return son;
}
var s=parent();//将结果保存在全局里
s();//50
</script>

Parent內部所有局部變數對其子函數來說都是可見的,但其子函數內的局部變數對其父函數是不可見的,這就是js特有的鍊式作用域結構,子物件會一級一級地向上查找所有父物件的變數,父物件的所有變數對子物件都是可見的,反之不成立!上面的son函數就是閉包。

閉包:函數內部定義函數,連接函數內部和外部的橋樑,閉包的作用有2個:

  • 一是前面提到的讀取函數內部的變量,

  • 二是讓這些變數的值保存在記憶體中,實作資料共享

以下是幾個閉包的例子

1、匿名函數實作閉包:

<script type="text/javascript">
var cnt=(function(){
    var i=0;
    return function(){
        alert(i);
        i++;
    }
})();
cnt();//0
cnt();//1
cnt();//2
cnt();//3

把匿名函數的執行結果(即對裡面子函數的宣告賦給全域變數cut), i就保存在記憶體裡了執行cut()時就直接從內訪問值了,i只有cnt()函數才能調用,直接alert(i)是不行的。

2、傳送參數至閉包內參數:

var cnt=(function(num){
return function(){
    alert(num);
    num++;
  }
})(5);
cnt();//5
cnt();//6
cnt();//7
//当然还可以调用时传参
var cnt=(function(){
    var i=0;
return function(num){
    num+=i;
    alert(num);
    i++;
  }
})();
cnt(1);//1
cnt(2);//3
cnt(3);//5

 相關推薦:

js閉包 與prototype

##一分鐘理解js閉包_javascript技巧######

以上是js閉包有什麼用? js閉包的用法實例(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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