閉包複雜面試題

2021-10-24 06:26:50 字數 1499 閱讀 2674

學習到的知識點,做乙個總結,僅供參考,如有不對,多多指教!

// 閉包複雜面試題

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變數以及...