鍍金池/ 問答/HTML/ 一道JavaScript面試題

一道JavaScript面試題

var a = function (val, index) {

console.log(index);
return {
    fn: function (name) {
        return a(name, val);
    }
}

}

var b = a(0); // underfined
b.fn(1); // 0
b.fn(2); // 0
b.fn(3); // 0

回答
編輯回答
萌二代

var b = a(0)為underfined是因為只給val賦值了,并沒有給index賦值,所以console.log(index)未定義,剩下的三個是因為name為1、2、3,但是index卻賦值為0,所以與name為多少無關(guān),都會打印出0

2018年8月9日 09:58
編輯回答
心悲涼

第一個underfined,因為index只聲明但是未賦值。
后面b繼承了a的fn方法。此時、index的值被fn函數(shù)賦值為val.也就是0。
所以后面三個都是打印0.

2017年7月30日 18:47
編輯回答
檸檬藍

閉包問題

執(zhí)行了var b = a(0);,index沒有傳進去,所以是underfined,同時會將val賦值為0,這個val不會被回收,因為返回的對象中引用了這個參數(shù)

b = {
    fn: function (name) {
        return a(name, val);
    }
}

執(zhí)行b.fn(1);就是執(zhí)行a(1,0),這里index賦值為0,所以會打印0,
下面同理

2018年1月23日 20:34