下面先看乙個例子,在不執行的情況下推測一下返回結果.
function t1()
return t2;
}var temp = t1();
var age = 99;
temp();
在學習了作用域之後也許會分析結果是99,實際上是20.
下面對其一一分析:
在大部分語言中,t1被呼叫執行,則申請記憶體並把其區域性變數push入棧。t1函式執行完畢,內部的區域性變數隨著函式退出而銷毀。因此age=20的區域性變數已經消失了。但是在js中,age=20這個變數,卻被t2捕捉,即使t1執行完畢,通過t2依然能訪問該變數。在js中,t1執行過程中,又生成t2,而從作用域上來說,t2能訪問到age=20,於是age=20沒有消失,而是與返回的t2函式形成了乙個「環境包」,這個包屬於t2,所以叫閉包。這種情況下,返回的函式並非孤立的函式,甚至把周圍的變數環境,形成了一封閉的「環境包」共同返回,所以叫閉包。
一句話概括,函式的作用域取決於宣告時,而不取決與呼叫時。
例如如果在多人開發的程式中需要乙個計數器,我們就可以用閉包實現。
var cnt =( function()
}());
alert(cnt());
alert(cnt());
alert(cnt());
JavaScript的閉包詳解
首先我們來看看一道題 首先可以看到上述題目有兩個函式,乙個函式包裹著乙個函式 當new person 的時候 person 函式開始被定義 產生乙個go 代表全域性 乙個ao代表本身 當執行this.say sss的時候,sss 函式會被定義但不會被執行,被定義的時候就儲存了person 的所有勞動...
javascript閉包使用
之前看到一段 很是不能理解,然後就查詢資料並且找網路上得大牛請教,最後弄懂了這段 然後就拿出來總結一下。先來看一段 var arrtest for var i 0 i 3 i arrtest function function function console.log arrtest 0 tostr...
javaScript閉包理解
以下是樓主的見解,如有錯誤請幫忙矯正。以下是是乙個簡單的閉包例子 function creatfunc var myfunc creatfunc alert myfunc 變數variable是乙個閉包,閉包的生命週期一般為呼叫閉包的物件為空 null 時結束。舉乙個複雜點的例子 var singl...