每日 3 題
7 以下代碼執(zhí)行后,控制臺中的輸出內(nèi)容為贬墩?
const obj = {
flag: false,
};
function A() {
this.flag = true;
return obj;
}
const a = new A();
console.log(a.flag);
8 以下代碼執(zhí)行后,控制臺中的輸出內(nèi)容為妄呕?
console.log(1);
setTimeout(() => {
console.log(2);
}, 0);
console.log(3);
Promise.resolve(4).then((b) => {
console.log(b);
});
console.log(5);
9 以下代碼執(zhí)行后陶舞,控制臺中的輸出內(nèi)容為?
var a = 10;
function a() {}
console.log(typeof a);
答案及解析
7 答案:false
- 考察 new 運(yùn)算符
- 如果構(gòu)造函數(shù)顯式返回了一個(gè)對象绪励,那么該對象會覆蓋 new 創(chuàng)建的對象
- 于是變量 a 指向 obj肿孵,因此 a.flag 即為 obj.flag
8 答案:1 3 5 4 2
- 考察事件循環(huán)、微任務(wù)疏魏、宏任務(wù)
- 瀏覽器中事件循環(huán)如下圖所示
未命名文件
- 整體代碼作為第 1 個(gè)宏任務(wù)
- 先按順序執(zhí)行同步任務(wù)停做,因此輸出:1 3 5,并將微任務(wù)和宏任務(wù)入隊(duì)大莫,此處微任務(wù)為 then 方法蛉腌,宏任務(wù)為 setTimeout
- 判斷有無微任務(wù),有 then 執(zhí)行,所以輸出 4
- 瀏覽器渲染完進(jìn)入下一個(gè)循環(huán)烙丛,宏任務(wù)隊(duì)列中有 setTimeout贯吓,執(zhí)行輸出 2
9 答案:number
- 考察變量提升和函數(shù)聲明提升
- var 聲明的變量和 function 都會提升,且函數(shù)優(yōu)先級高于變量蜀变,原代碼相當(dāng)于:
function a() {}
var a;
a = 10;
console.log(typeof a);
- 并且變量不會重復(fù)聲明悄谐,于是 a = 10 賦值給了原本指向函數(shù)的變量 a,最終 a 的類型變成 number