閉包理解及面試題目

2021-09-19 11:54:39 字數 1149 閱讀 5520

1 閉包的理解

在a函式裡面建立乙個函式b,則b就是閉包

2 閉包的作用

(1)js作用域,函式內部可以呼叫函式外部的變數,反之不行,如果需要,則可以使用閉包

(2)一般情況下, 函式執行完後,區域性活動物件就會被銷毀,記憶體中僅儲存全域性作用域(全域性執行環境的變數物件),但是閉包情況下,比如上面這個**,函式a執行完後,變數a不會被摧毀,因為匿名函式b中還儲存著這個變數,直到匿名函式被銷毀後,次變數才會被釋放;所以閉包,會占用更多的占用記憶體。

3 閉包問題

(1)bug原因

首先函式text返回乙個函式陣列,這裡for迴圈4次,所以陣列result是四個函式;

函式text返回後,變數i的值是4,所以每個函式的作用域鏈中都儲存著同乙個變數i=4;

對函式進行迴圈呼叫時,返回的都是4;

4 閉包中的this物件

不過,匿名函式的執行環境,具有全域性性,因此其this物件通常指window

r:每個函式在被呼叫時,都會自動取得兩個特殊變數:this,arguments;內部函式在搜尋這兩個變數時,只會搜尋到其活動物件為止,所以不會訪問外部函式中的這兩個變數;

fix:

可以將外部作用域中的this物件儲存在閉包可以訪問到的變數裡面

面試題 閉包問題

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