JS經典閉包例項

2021-09-24 08:19:34 字數 926 閱讀 5675

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); 等同於fun(0, undefined),因為未傳遞第二引數,所以列印undefined; a.fun(1); 因為閉包的存在,所以n依然在記憶體中存在,所以此式等同於fun(0, undefined).fun(1); 所以a.fun(1)返回的就是fun(m, n); m是傳進去的引數1,n是記憶體中依然存在的0,所以實際返回的是fun(1, 0);因此列印的值為0,; 後面兩步就同理了; 注意:這一步弄明白,這道題基本就明白了。所以一定要注意。第一行的後面兩步就換了一下引數。第二行就相當於一直迭代,第三行就是稍加變化,重點在這一步。 a.fun(2); 返回fun(2, 0),依然列印0; a.fun(3); 返回fun(3, 0),依然列印0; 所以第二行列印值為undefined,0,0,0 第二行

var b = fun(0) 從這來看,和第一行暫時一樣,列印undefined; .fun(1) 此時和第一行第二步也是一樣,返回fun(1, 0), 列印0; .fun(2) 這一步其實已經變為fun(1, 0).fun(2),弄明白了上面,你一定知道這一步應該返回的是fun(2, 1);因為此時在記憶體中的n是1;所以列印值為1; .fun(3) 和上一步道理相同,n變為2,即fun(3, 2);列印2; 所以第二行列印值為undefined,0,1,2 第三行就是一二行的結合,如果弄懂了上面兩行,第三行不過是乙個驗證的過程。也就不在多說。 輸出為 undefined,0,1,1

js 閉包例項

var db function 建立乙個函式,這個函式提供一些訪問data的資料的方法 return function key,val getelse set 我們可以呼叫這個匿名方法 返回這個內部函式,它是乙個閉包 db x 返回 undefined db x 1 設定data x 為1 db x...

js 閉包例項

var db function 建立乙個函式,這個函式提供一些訪問data的資料的方法 return function key,val getelse set 我們可以呼叫這個匿名方法 返回這個內部函式,它是乙個閉包 db x 返回 undefined db x 1 設定data x 為1 db x...

經典JS閉包題

在逛部落格時,看見乙個很有意思的閉包題,發現自己對閉包沒有完全理解,故記錄下來。先看題目 function fun n,o var a fun 0 a.fun 1 a.fun 2 a.fun 3 undefined,var b fun 0 fun 1 fun 2 fun 3 undefined,va...