閉包函式
閉包函式又稱繫結函式,一個顯著的特徵是,當函式在不在它所處的變數作用範圍時,仍然可以使用本地變數。
(1)作為值從另一個函式中返回。(作為值從函式返回的函式都是閉包函式)
function A(){
var temp = "local temp";
B = function(){
alert(temp);
}
return B;
}
var myFunc = new A();
myFunc();
如上述程式碼段所示,temp作為本地變數,myFunct位於函式的作用域外部,按理來說,並不能呼叫temp。
但在這段程式碼中,實際上是可以使用的,這就是閉包函式。
(2)利用變數作用範圍也可以產生閉包函式。
var F;
function A(){
var temp = "local temp";
F = function(){
alert(temp);
}
}
A();
F();
在本例中,F函式仍然可以呼叫本地變數temp.但是F所處的環境中其他程式並不能呼叫這個變數。
總的來說,閉包函式的核心就是,函式能夠在任何時候,任何環境下訪問函式在定義時的私有變數,這個私有變數在函式被呼叫的環境中是不能直接訪問的。
閉包函式的應用:匿名自執行函式
想要理解閉包函式,首先必須理解js中的函式作用域和作用域鏈問題。
關於函式作用域,這裡有一篇很好的文章:http://blog.csdn.net/yueguanghaidao/article/details/9568071
舉個例子
<pre name="code" class="javascript">for(var i = 0; i < 10; i ++){
setTimout(function(){
alert(i);
},1000);
}
在這段程式碼中,作用鏈是function匿名函式-> setTimeout函式->window, 匿名函式的i值在該函式中並沒有被定義,因此需要向上一級作用域尋找。又因為在第一次執行setTimeout函式之前,for迴圈肯定已經完成了,因此,此時i的值為10。
所以這段程式碼的輸出結果會alert 十次數字10.
相關文章
- 函式閉包函式
- go 閉包函式Go函式
- js函式閉包JS函式
- 回撥函式 與 函式閉包函式
- 閉包函式(匿名函式)的理解函式
- 理解Python函式閉包Python函式
- 函式閉包機制函式
- JS函式表示式——函式遞迴、閉包JS函式遞迴
- 函式物件、裝飾器、閉包函式函式物件
- Python 閉包函式說明Python函式
- JavaScript4:函式和閉包JavaScript函式
- Python基礎之閉包函式Python函式
- 淺談匿名函式和閉包函式
- 3. 匿名函式與閉包函式
- 立即執行函式(IIFE)&&閉包函式
- rust十三.1、匿名函式(閉包)Rust函式
- 1.13 JavaScript4:函式和閉包JavaScript函式
- PHP新特性之閉包、匿名函式PHP函式
- 閉包函式,裝飾器詳解函式
- python 關於 函式物件與閉包Python函式物件
- js閉包與封閉函式與其他知識點JS函式
- Kotlin 之高階函式與Lambda表示式與閉包Kotlin函式
- 課時20:內嵌函式和閉包函式
- 13. 閉包函式與裝飾器函式
- js中的函式巢狀和閉包JS函式巢狀
- .NET併發程式設計-函式閉包程式設計函式
- 第一類物件(函式),閉包及迭代器物件函式
- Golang閉包案例分析與普通函式對比Golang函式
- 【Go語言學習】匿名函式與閉包Go函式
- JavaScript碎片———函式閉包(模擬物件導向)JavaScript函式物件
- python基礎知識之函式初階——閉包Python函式
- JS學習理解之閉包和高階函式JS函式
- 閉包詳解二:JavaScript中的高階函式JavaScript函式
- Go 函式的三種用法:方法、閉包、實參Go函式
- 測開之函式進階· 第6篇《閉包》函式
- iOS學習筆記42 Swift(二)函式和閉包iOS筆記Swift函式
- js中,函式的閉包、作用域跟[[Scopes]]的關係JS函式
- 美麗的閉包,在js中實現函式過載JS函式
- Python學習之路26-函式裝飾器和閉包Python函式