幾道JS閉包題目

2021-09-18 02:27:04 字數 1220 閱讀 5562

function fun(n,o) 

};}

三個fun函式是一樣的嗎?

第乙個fun是具名函式,可通過fun.name得到'fun',即函式名;返回值是乙個物件字面量表示式,屬於乙個新的object;

物件字面量裡有乙個叫fun的屬性,該屬性是乙個匿名函式表示式,屬於新建立的函式,所以第乙個和第二個fun函式是不一樣的;

匿名函式表示式又返回乙個fun函式,我們可以知道這個函式肯定不是新建立的,那麼它是指的第乙個還是第二個呢?

這就涉及到函式作用域鏈的問題了。

全域性環境中有乙個函式fun(),fun()的區域性環境中沒有變數,所以第三個fun在區域性環境中查詢不到,就會向上查詢,即在全域性環境中找到。

所以第三個和第乙個是同乙個。

var name = "the window";

var object = ;

}};alert(object.getname()()); //"the window"

每個函式在被呼叫時都會自動取得兩個特殊變數:this和arguments。內部函式在搜尋這兩個變數時,只會搜尋到其活動物件為止,因此永遠不可能直接訪問到外部函式中的這兩個變數。

var name = "the window";

var object = ;

}};alert(object.getname()()); //"my object"

function createfunction();

}return result;

}

這個函式會返回乙個函式陣列,表面上看,每個函式都應該返回自己的索引值,但實際上每個函式都返回10。因為每個函式的作用域鏈中都儲存這createfunction()函式的活動物件,所以它們引用的都是同乙個變數i。當createfunction()函式返回後,變數i的值是10,此時每個函式都引用者儲存變數i的同乙個變數物件,所以在每乙個函式內部i的值都是10.

function createfunction();

}(i);

}return result; //可以返回各自不同的數值了

}

說說js閉包

js閉包涉及到作用域,js的作用域有兩種,全域性變數和區域性變數,全家變數就是在函式外宣告的,區域性變數是在函式內宣告的,函式內部可以直接讀取全域性變數 但是函式外部自然無法讀取函式內的區域性變數 函式內部宣告變數的時候,要用var不然就是個全域性變數 有時候需要得到函式內的區域性變數 濫用閉包會可...

JS閉包理解

下圖例項 body ul li 1 li li 2 li li 3 li ul body html script vara document.getelementsbytagname li for vari 0 i a.length i i 如何從外部讀取區域性變數 functionvisitinn...

JS基礎 閉包

注 自由變數是既不是在本地宣告又不作為引數傳遞的一類變數。function a return b var b a b hello closure 定義乙個函式a a中定義了函式b a中返回b 執行a 把a的返回結果賦值給變數b 執行b 閉包會在父函式外部,改變父函式內部變數的值。所以,如果你把父函式...