02Js面试题

141 阅读1分钟

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

一、第一题

  • 考点:预解析、作用域
  • 当函数执行时,如果没有调用者,那么函数的this=window(全局对象)

image.png

二、第二题

  • 考点:预解析、作用域、arguments
  • 当函数执行时,如果有调用者,那么函数的作用域就是就是调用者(下面第一个题中调用者为数组对象arguments,第二个题为对象obj)

image.png

image.png

三、第三题

  • 考点:预解析、字面量、apply/call、作用域
  • apply()和call()方法都用于更改调用者对象,只是传递参数的方式不一样
  • apply(调用者对象, [ 参数1,参数2,... ])
  • call(调用者对象,参数1,参数2,...)

image.png

四、第四题

  • 考点:变量提升、作用域、预解析
  • (1)var a代码预解析的时候,会把var声明的变量进行提升,即函数最开始会声明变量var a = undefined
  • (2)执行a=100;时,将100赋值给(1)中声明的变量a
  • (3)执行console.log(a);时,在函数内部作用域找到上面声明的变量a,打印100
  • (4)执行console.log(this.a);时,因为函数无调用者,即this=window,所以this.a=window.a=10,打印10
  • (5)var a在代码预解析的时候执行了,此处跳过
  • (6)执行console.log(a);时,情况同(3),打印100

image.png