1、簡單的描述閉包:如果在函式func內部宣告函式inner,然後在函式外部呼叫inner,這個過程即產生了乙個閉包。
(1)閉包是指:有權訪問另乙個函式作用域中的變數的函式。
(2)閉包與變數
作用域鏈引出的乙個***:閉包只能取得包含函式中任何變數的最後乙個值。閉包所儲存的是整個變數物件,而不是某個特殊的變數。
function createfunctions();
}return result;
}
看似函式應該會會返回乙個函式陣列,返回0,1,2,,,,實際上,因為每個函式的作用域鏈中都儲存著 createfunction()函式的活動物件,變數的值是10,每個函式內部都是返回10。
我們可以通過建立另乙個匿名函式強制讓閉包的行為符合預期。
function createfunctions()
}(i); //變數i的當前值複製給引數num,實現返回各個不同的值
}return result;
}
(3)關於this物件
閉包會攜帶包含他的函式的作用域,因此會比起亞函式占用更多的記憶體,過度的使用閉包可能會導致記憶體占用過多,故要慎用!
(4)例題
function foo()
}var f1 = foo(),
f2 = foo();
f1();
f1();
f2();
// 0 1 0
閉包的用途:1、訪問外部函式的變數。2、使外部函式被引用的變數一直儲存在記憶體中。
這是乙個閉包,閉包可以通過作用域鏈向上訪問外層函式的變數和函式,同時閉包的作用域鏈上引用了外部函式的活動物件。
所以當f1();函式呼叫結束後,按道理來講,這裡的變數應該被**,記憶體應該被釋放,但由於外層函式的活動物件被子作用域鏈引用,
一直儲存在記憶體中,輸出結果為0,之後i++ 變為1,當再次呼叫f1()時,存在於記憶體中的變數i=1,列印輸出,不過變數i還一直存在,除非手動設定為i=null。
2、匿名函式:建立乙個函式並將它賦值給變數。
如:var functionname = function(arg0,arg1,arg2){3、函式宣告----建立函式的一種方式//函式體
如:function sayhi(){alert("hi!");
sayhi();
匿名函式與閉包
function box alert box leefunction var box function alert box lee function var box function alert box leealert function function age 100 函式裡面放匿名函式 形成閉...
閉包與匿名函式
普通函式 function box 匿名函式 function 通過表示式自我執行 functionbox 表示執行函式,並且傳參 把匿名函式賦值給變數 var box function alert box 呼叫方式和函式呼叫相似 函式裡的匿名函式 function box alert box 呼叫...
匿名函式和閉包
匿名函式 匿名函式和普通函式 function box alert box 閉包概念 閉包是指有權訪問另乙個函式作用域中的變數的函式,建立閉包的常見的方式,就是在乙個函式內部建立另乙個函式,通過另乙個函式訪問這個函式的區域性變數。閉包作用 使用閉包有乙個優點,也是其缺點。可以把區域性變數駐留在記憶體...