閉包函式
閉包函式又稱繫結函式,一個顯著的特徵是,當函式在不在它所處的變數作用範圍時,仍然可以使用本地變數。
(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函式
- 回撥函式 與 函式閉包函式
- 閉包函式(匿名函式)的理解函式
- JS閉包函式概念JS函式
- JavaScript 匿名函式 閉包JavaScript函式
- JS函式表示式——函式遞迴、閉包JS函式遞迴
- JS閉包函式和回撥函式JS函式
- 函式物件、裝飾器、閉包函式函式物件
- 理解Python函式閉包Python函式
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- Python 閉包函式說明Python函式
- JavaScript4:函式和閉包JavaScript函式
- 3. 匿名函式與閉包函式
- python中的閉包函式Python函式
- 淺談匿名函式和閉包函式
- 立即執行函式(IIFE)&&閉包函式
- PHP閉包函式使用詳解PHP函式
- PHP新特性之閉包、匿名函式PHP函式
- Python基礎之閉包函式Python函式
- 1.13 JavaScript4:函式和閉包JavaScript函式
- PHP 回撥、匿名函式和閉包PHP函式
- 閉包函式,裝飾器詳解函式
- JavaScript進階系列01,函式的宣告,函式引數,函式閉包JavaScript函式
- swift1.2語言函式和閉包函式介紹Swift函式
- js閉包與封閉函式與其他知識點JS函式
- python 關於 函式物件與閉包Python函式物件
- .NET併發程式設計-函式閉包程式設計函式
- 課時20:內嵌函式和閉包函式
- js中的函式巢狀和閉包JS函式巢狀
- Swift4.0 sorted(by:)函式理解(閉包$理解)Swift函式
- 學習一下閉包函式 - Closures函式
- 探索c#之函式建立和閉包C#函式
- 一個閉包函式的簡單例子函式單例
- 13. 閉包函式與裝飾器函式
- Kotlin 之高階函式與Lambda表示式與閉包Kotlin函式
- 【Go語言學習】匿名函式與閉包Go函式