Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
一、面试题一-函数默认值
- 下面代码中输出的结果为:2和1
- 执行
f1(2)时,首先将2赋值给函数参数x,然后将x的值赋给y,即y=2,所以最后打印2 - 执行
f2()时,由于没有传入参数值,且函数参数y=x,就会在函数的父级中查找,找到x=1,然后就将x的值赋给y,即y=1,所以最后打印1
二、面试题二-原型
- 实例对象没有显示原型(prototype),有隐式原型(proto)
- 在下面的代码中,obj为F()的实例对象,所以它没有prototype属性,即
console.log(obj.prototype)打印出undefined - 实例的隐式原型等于构造函数的显示原型,即
obj.__proto__==F.prototype==Object,所以console.log(obj.__proto__)打印出Object
三、面试题三-let
- let声明的变量是有块级作用域的,而且在预解析阶段不会进行变量提升,只能先声明,后使用,不然会报错
- 在下面的代码中,if语句体中let声明的变量不会进行变量提升,在执行到
console.log(a)时,首先会在if语句体中查找是否有变量a,然后发现有let a,但是这句声明在执行代码的后面,也就是变量a先使用,后声明了,所以就会报错