閉包的定義及作用

2021-09-25 12:51:18 字數 1729 閱讀 4121

1、閉包的定義:閉包就是能夠讀取其他函式內部變數的函式。在js中,可以將閉包理解成「函式中的函式「。

如下**中f2()函式就是閉包:
function f1()

}

2、閉包的作用:

a、可以讀取函式內部的變數

b、讓這些變數的值始終儲存在記憶體中。這是因為閉包的執行依賴外部函式中的比那輛,只有閉包執行完,才會釋放變數所佔的記憶體
3、使用閉包的注意事項

(1) 問題:由於閉包會使得函式中的變數都被儲存在記憶體中,記憶體消耗大,所以不能濫用閉包,否則會造成網頁的效能問題,在ie中可能會造成記憶體洩露。

解決方法:在退出函式之前,將不使用的區域性變數全部刪掉
(2) 問題:閉包會在父函式外部,改變父函式內部變數的值。

如果把父函式當做物件使用,把閉包當做公用方法,把內部變數當做私有屬性,此時不要隨便改變父函式內部變數的值。

如下面的例子:

//----**一 

var name = "the window";

var object = ;}};

alert(object.getnamefunc()()); //this的作用域是在函式執行的時候確定,因為匿名函式是乙個全域性變數,因此this指向的是window物件

// 因此輸出結果是:the window

//-----**二

var name = "the window";

var object = ;}};

alert(object.getnamefunc()()); // 所以暑促值:my object

一道閉包的面試題

function fun(n,o)

}; }

var a = fun(0); a.fun(1); a.fun(2); a.fun(3);

var b = fun(0).fun(1).fun(2).fun(3);

var c = fun(0).fun(1); c.fun(2); c.fun(3);

//問:三行a,b,c的輸出分別是什麼?

var a = fun(0); a.fun(1); a.fun(2); a.fun(3);

//undefined 0 0 0

var b = fun(0).fun(1).fun(2).fun(3);

//undefined 0 1 2

var c = fun(0).fun(1); c.fun(2); c.fun(3);

//undefined 0 1 1

看下面這段**,呼叫fun後,會返回乙個空物件

function fun(n,o)

}

function fun(n,o)

}; }

var a = fun(0);

注意:當呼叫函式的時候,傳入的實參比函式宣告時指定的形參個數少時,剩下的形參都被設定為undefined

上面呼叫函式var a=fun(0); 輸出的結果如下:

console.log(o); //undefined

a的值是呼叫fun(0)後返回的物件,即a的值如下:

}理解了這裡,上面的題目就可以做出來了。

閉包的作用及優缺點

下面我們就簡單的了解一下閉包這個東西到底是什麼 首先,我們先來講講什麼是閉包 簡單來說就是乙個定義在函式內部的函式,可以讀取到其他函式內部變數的函式,本質上,閉包就是乙個把函式內部和外部連線起來的橋梁 那我們讀取函式內部的變數為什麼要用到閉包呢,或者說閉包的作用是什麼?這就涉及到變數的生命週期問題了...

閉包(2) 閉包的現象與作用

閉包的現象 當內部的函式被儲存在外部時,將會生成閉包。閉包會導致原有的作用域鏈不釋放,造成記憶體洩漏 占用的多了,剩下的就少了 閉包的作用 1.實現公用變數eg 函式累加器 function add return demo var counter add counter counter counte...

作用域 閉包

1.js執行順序 語法分析 預編譯 先生成go物件 1.函式執行生成ao物件 2.形參和變數作為ao物件的鍵名,鍵值是undefined 3.實參賦值給形參 4.在函式中找到函式宣告,把函式作為ao物件的屬性名,屬性值為函式體 執行js 作用域 變數作用範圍 1.作用域 變數作用範圍 1 函式作用域...