23Js面试题

87 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

一、面试题一-函数默认值

  • 下面代码中输出的结果为:2和1
  • 执行f1(2)时,首先将2赋值给函数参数x,然后将x的值赋给y,即y=2,所以最后打印2
  • 执行f2()时,由于没有传入参数值,且函数参数y=x,就会在函数的父级中查找,找到x=1,然后就将x的值赋给y,即y=1,所以最后打印1

image.png

二、面试题二-原型

  • 实例对象没有显示原型(prototype),有隐式原型(proto
  • 在下面的代码中,obj为F()的实例对象,所以它没有prototype属性,即console.log(obj.prototype)打印出undefined
  • 实例的隐式原型等于构造函数的显示原型,即obj.__proto__==F.prototype==Object,所以console.log(obj.__proto__)打印出Object

image.png

三、面试题三-let

  • let声明的变量是有块级作用域的,而且在预解析阶段不会进行变量提升,只能先声明,后使用,不然会报错
  • 在下面的代码中,if语句体中let声明的变量不会进行变量提升,在执行到console.log(a)时,首先会在if语句体中查找是否有变量a,然后发现有let a,但是这句声明在执行代码的后面,也就是变量a先使用,后声明了,所以就会报错

image.png