1. 程式人生 > >js中閉包(積累總結)

js中閉包(積累總結)

結果 ons 網頁 不能 創建 ner alert 子函數 存在

什麽是閉包:

當內部函數 在定義它的作用域 的外部 被引用時,就創建了該內部函數的閉包 ,如果內部函數引用了位於外部函數的變量,當外部函數調用完畢後,這些變量在內存不會被 釋放,因為閉包需要它們.

例子1

function outerFun()

{

var a=0;

function innerFun()

{

a++;

alert(a);

}

return innerFun; //註意這裏

}

var obj=outerFun();

obj(); //結果為1

obj(); //結果為2

var obj2=outerFun();

obj2(); //結果為1

obj2(); //結果為2

例子2

function Foo() {

var i = 0;

return function() {

console.log(i++);

}

}

var f1 = Foo(),

f2 = Foo();

f1();

f1();

f2();

// 0 1 0

由於在Javascript語言中,只有函數內部的子函數才能讀取局部變量,因此可以把閉包簡單理解成"定義在一個函數內部的函數"

閉包的最大用處有兩個,一個是可以讀取函數內部的變量,另一個就是讓這些變量始終保持在內存中,即閉包可以使得它誕生環境一直存在。請看下面的例子,閉包使得內部變量記住上一次調用時的運算結果。

所以內存消耗很大。因此不能濫用閉包,否則會造成網頁的性能問題。

js中閉包(積累總結)