1、在函式內部宣告變數的時候一定要用var命令。如果不用的話,實際上宣告了乙個全域性變數。
2、在js中,對於變數,就是內部函式可以一直向上尋找父物件變數,內部函式可以訪問父函式定義的變數,但父函式不能訪問子函式變數。最簡單的理解就是兒子可以要父親的,父親要不了兒子的。
3、閉包就是為了解決上述問題的,將子函式作為父函式的返回值,這樣就可以在外部讀取內部變數了。
function f1()
function f2()
return f2; }
var result=f1();
result(); // 999
nadd();
result(); // 1000
在這段**中,result實際上就是閉包f2函式。它一共執行了兩次,第一次的值是999,第二次的值是1000。這證明了,函式f1中的區域性變數n一直儲存在記憶體中,並沒有在f1呼叫後被自動清除。
4、函式體內部用var關鍵字定義變數,會對變數有個保護作用,這個保護的作用域限定在這個函式體內,也就是說,在這個函式體內訪問這個變數,是這個值,如果沒有var關鍵字,則定義並改變了變數的值。
function outerfun()
var a=4;
outerfun();
alert(a);
結果是 0,4 . 因為在函式內部使用了var關鍵字維護a的作用域在outfun()內部.
再看下面的**:
js**
function outerfun()
var a=4;
outerfun();
alert(a);
結果為 0,0 真是奇怪,為什麼呢?
作用域鏈是描述一種路徑的術語,沿著該路徑可以確定變數的值.當執行a=0時,因為沒有使用var關鍵字,因此賦值操作會沿著作用域鏈到var a=4; 並改變其值.
javascript閉包詳解
下面先看乙個例子,在不執行的情況下推測一下返回結果.function t1 return t2 var temp t1 var age 99 temp 在學習了作用域之後也許會分析結果是99,實際上是20.下面對其一一分析 在大部分語言中,t1被呼叫執行,則申請記憶體並把其區域性變數push入棧。t...
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...