js閉包的理解

2022-06-18 08:15:08 字數 2268 閱讀 4282

閉包:最開始的解釋就是說函式套函式,巢狀(內部)函式對其容器(外部)函式是私有的。它自身就形成了乙個閉包。

function makefunc() 

return displayname;

}var myfunc = makefunc();

myfunc();

makefunc()建立了乙個區域性變數name和乙個名為displayname()的函式。displayname()是定義在makefunc()裡的內部函式,僅在該函式體內可被獲取;重點:閉包可以讓你從內部函式訪問外部函式作用域,所以說makefunc()就是乙個閉包。

在例子中,myfunc是執行makefunc時建立的displayname函式例項的引用(因為makefunc() return displayname),而displayname例項仍可訪問其詞法作用域(makefunc函式的作用域--根據宣告變數的位置來確定該變數可被訪問的位置 )中的變數,即可以訪問到name。由此,當myfunc被呼叫時,name仍可被訪問,其值mozilla就被傳遞到alert中。

function makeadder(x) ;

}var add5 = makeadder(5); //add5 = function(y);

var add10 = makeadder(10);

console.log(add5(2)); // 7

console.log(add10(2)); // 12

我們定義了makeadder(x)函式,它接受乙個引數x,並返回乙個新的函式。返回的函式接受乙個引數y,並返回x+y的值

用閉包模擬私有方法  (如何使用閉包來定義公共函式,並令其可以訪問私有函式和變數)

var makecounter = function() 

return ,

decrement: function() ,

value: function()

} };var counter1 = makecounter();

var counter2 = makecounter();

console.log(counter1.value()); /* logs 0 */

counter1.increment();

counter1.increment();

console.log(counter1.value()); /* logs 2 */

counter1.decrement();

console.log(counter1.value()); /* logs 1 */

console.log(counter2.value()); /* logs 0 */

利用閉包實現新新增的屬性(方法)--封裝新的方法,每呼叫乙個函式,都會有屬於自己的環境,各自互不干擾。

每個閉包都是引用自己詞法作用域內的變數privatecounter。每次呼叫其中乙個計數器時,通過改變這個變數的值,會改變這個閉包的詞法環境。然而在乙個閉包內對變數的修改,不會影響到另外乙個閉包中的變數。 

加一道閉包筆試題,每次執行列印的是多少?

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    //undefined 0 0 0

b    //undefined 0 1 2

c    //undefined 0 1 1

JS閉包理解

下圖例項 body ul li 1 li li 2 li li 3 li ul body html script vara document.getelementsbytagname li for vari 0 i a.length i i 如何從外部讀取區域性變數 functionvisitinn...

JS閉包理解

js閉包理解 在很多面試題中都會問什麼是js的閉包,為什麼需要使用閉包,使用閉包的優缺點!我在面試其他人的時候也喜歡問這個問題,回答的也是千奇百怪,現在就總結一下我對閉包的理解。閉包是一種概念,這種概念比較複雜,很多地方的定義不盡相同,我的理解是 閉包是能讀取函式內部變數的函式,也就是定義在函式內部...

js閉包理解

什麼是閉包?這兩天我在網上翻閱了大量的閉包理解部落格,有優秀的也有生搬硬套的。歸根揭底,還是理解的問題。我曾經聽老師講閉包後,還是一臉疑惑,然後下課去網上查閱資料,仔細研究之後知道是裡面要套乙個函式返回父級變數。這次我就講解一下個人理解的閉包。為什麼會出現閉包?首先,我們先想下,我現在需要乙個一直用...