請看以下**在輸出臺的輸出情況
答案是4400,4401,4399,4400
首先,test函式做了什麼?test在自己的函式作用域內建立乙個變數n,以及乙個函式add,這時add就作為乙個閉包,它可以在外部訪問到test內部的變數n,並對其進行加法。然後test返回乙個物件,這個物件有乙個n變數以及乙個add函式,n變數是test內部的變數n的乙個快取,而add則是test內部add的乙個引用。
然後,我們執行了兩次test,並把結果返回給兩個變數result,result2,這兩個變數所擁有的匿名物件是沒有任何關聯的,因此result2.add()執行的時候,和result.add()執行的情況一樣,返回4400。然後result.add()再次執行,返回4401。需要注意的是,這裡result.add()對變數n的改變,並不是對匿名物件內部的那個n進行改變,而是test內部的那個n,前面說過,add僅是對test內部函式的乙個引用,它操作的n是和它次作用域相關的n。因此,當我們呼叫輸出result.n的時候,這時候才是訪問物件內部的n變數,返回的是未被操作的4399.
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 匿名函式呼...
面試題 閉包問題
function console.log y console.log x console.log y 輸出結果為 1 console.log x 輸出結果為 error,直接報錯 解析宣告變數 從右向左賦值,可分解為 y 1 var x y 可見 y 為全域性變數,x為閉包函式內的區域性變數,在co...
javascript閉包經典面試題
首先第一行,先看 var a fun 0 把0傳入 fun n,o 中,那麼 n 0,o undifine,而 fun n,o return 了 所以a就等於 所以a.fun 1 function 1 fun 1,0 所以會輸出0,同樣a.fun 2 function 2 fun 2,0 輸出0,以...