這篇文章帶給大家的內容是關於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閉包_javascript技巧######以上是js閉包有什麼用? js閉包的用法實例(附程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!