每日 3 题
7 以下代码执行后,控制台中的输入内容为?
const obj = { flag: false,};function A() { this.flag = true; return obj;}const a = new A();console.log(a.flag);
8 以下代码执行后,控制台中的输入内容为?
console.log(1);setTimeout(() => { console.log(2);}, 0);console.log(3);Promise.resolve(4).then((b) => { console.log(b);});console.log(5);
9 以下代码执行后,控制台中的输入内容为?
var a = 10;function a() {}console.log(typeof a);
答案及解析
7 答案:false
- 考查 new 运算符
- 如果构造函数显式返回了一个对象,那么该对象会笼罩 new 创立的对象
- 于是变量 a 指向 obj,因而 a.flag 即为 obj.flag
8 答案:1 3 5 4 2
- 考查事件循环、微工作、宏工作
浏览器中事件循环如下图所示
- 整体代码作为第 1 个宏工作
- 先按程序执行同步工作,因而输入:1 3 5,并将微工作和宏工作入队,此处微工作为 then 办法,宏工作为 setTimeout
- 判断有无微工作,有 then 执行,所以输入 4
- 浏览器渲染完进入下一个循环,宏工作队列中有 setTimeout,执行输入 2
9 答案:number
- 考查变量晋升和函数申明晋升
- var 申明的变量和 function 都会晋升,且函数优先级高于变量,原代码相当于:
function a() {}var a;a = 10;console.log(typeof a);
- 并且变量不会反复申明,于是 a = 10 赋值给了本来指向函数的变量 a,最终 a 的类型变成 number