前端面试题每日3题——2022-09-01

每日 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

  1. 考察 new 运算符
  2. 如果构造函数显式返回了一个对象,那么该对象会覆盖 new 创建的对象
  3. 于是变量 a 指向 obj,因此 a.flag 即为 obj.flag

8 答案:1 3 5 4 2

  1. 考察事件循环、微任务、宏任务

  2. 浏览器中事件循环如下图所示

    未命名文件.jpg

  3. 整体代码作为第 1 个宏任务

  4. 先按顺序执行同步任务,因此输出:1 3 5,并将微任务和宏任务入队,此处微任务为 then 方法,宏任务为 setTimeout

  5. 判断有无微任务,有 then 执行,所以输出 4

  6. 浏览器渲染完进入下一个循环,宏任务队列中有 setTimeout,执行输出 2

9 答案:number

  1. 考察变量提升和函数声明提升
  2. var 声明的变量和 function 都会提升,且函数优先级高于变量,原代码相当于:
function a() {}
var a;

a = 10;
console.log(typeof a);
  1. 并且变量不会重复声明,于是 a = 10 赋值给了原本指向函数的变量 a,最终 a 的类型变成 number
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值