學習到的知識點,做乙個總結,僅供參考,如有不對,多多指教!
// 閉包複雜面試題
function
fun(n, o)}}
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
//解析:
var a =
fun(0)
;//undefined 呼叫fun傳0給n,列印o是未定義的
// 此時n=0,o:undefined
a.fun(1)
;//0
// 在呼叫用a去呼叫內層的fun函式 把1傳遞給m
// 此時m=1,n還是上一次的n 所以 此時n=0 然後 又把n傳給o 此時列印出來的就是0
a.fun(2)
;//0
// 在呼叫用a去呼叫內層的fun函式 把2傳遞給m
// 此時m=2,n還是上一次的n 所以 此時n=0 然後 又把n傳給o 此時列印出來的就是0
a.fun(3)
;//0
// 在呼叫用a去呼叫內層的fun函式 把3傳遞給m
// 此時m=3,n還是上一次的n 所以 此時n=0 然後 又把n傳給o 此時列印出來的就是0
var b =
fun(0)
.fun(1
).fun(2)
.fun(3
);// 第一次呼叫fun(0) 此時o是undefined的 n=0
// 然後有接著呼叫.fun(1)此時m=1,n=0 繼續走到最內層 去呼叫了最外層fun(1,0)
// 此時n為0 所會列印0
// 下面依次類推,所以最後結果為 undefined 0 1 2
var c =
fun(0)
.fun(1
);//undefined 0
// fun(0).fun(1)和上一次的道理一樣,走到fun(1)此時列印 undefined 0
// 執行完fun(0).fun(1) 此時n=1了,所以再呼叫內層fun(m=2,n=1)
// 此時o接受到的值是1,n接收的值是2,所以會列印1
c.fun(2)
;//1
// 執行完c.fun(2) 此時還是n=1,所以再呼叫內層fun(m=3,n=1)
// 此時o接受到的值是1,n接收的值是3,所以會列印1
c.fun(3)
;//1
面試題 閉包問題
function console.log y console.log x console.log y 輸出結果為 1 console.log x 輸出結果為 error,直接報錯 解析宣告變數 從右向左賦值,可分解為 y 1 var x y 可見 y 為全域性變數,x為閉包函式內的區域性變數,在co...
JS閉包 面試題
function setobj p p.name bb var p setobj p console.log p 程式的執行結果是aa 匿名函式的this一般是指向window var number 2 var obj var fn1 obj.fn1 console.log number 匿名函式呼...
js閉包面試題
請看以下 在輸出臺的輸出情況 答案是4400,4401,4399,4400 首先,test函式做了什麼?test在自己的函式作用域內建立乙個變數n,以及乙個函式add,這時add就作為乙個閉包,它可以在外部訪問到test內部的變數n,並對其進行加法。然後test返回乙個物件,這個物件有乙個n變數以及...