Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情。
一、第一题
- 考点:预解析、变量提升
var a = b =3;等价于b =3;var = a = b,b = 3;这种定义变量的方式会在预解析时在全局作用域下声明变量b,然后在执行函数时赋值为3,- 而变量a因为其时在函数内部声明并定义,所以当函数执行完毕后就会被销毁。
- 因此在全局作用域下
console.log(a)会报错(因为全局作用域下没有变量a),而在全局作用域下console.log(b),会打印3
二、第二题
- 考点:预解析
- 预解析时函数的优先级大于var声明的变量,所有预解析完成之后,a是函数类型。因此第一个
console.log(a)打印出的是函数a a = 100;这行代码将100赋值给a,因此第二个console.log(a)打印出的是100
三、第三题
- 考点:自执行函数、预解析
- 自执行函数会自动执行,且没有调用者,因此自执行函数的this=window,而且预解析时函数的优先级最高,所以下面两个题的代码打印的都是100
四、第四题
- 考点:预解析、作用域
- 代码块内的代码不会进行预解析,所以if{}else{}中变量在预解析都没进行变量提升,因此前四个
console.log()打印的都是undefined - 在函数执行时,第一个if语句条件为false,所以其中的代码不会执行。第二个if语句中的代码会执行,执行完成之后就声明并定义了函数b2和变量a2,所以这两个
console.log()会打印出函数和变量值10,另外两个打印的时undefined
五、第五题
- 考点:预解析、变量声明
- let声明的变量不会进行变量提升,而且if语句中的代码不会进行预解析,所有当执行到
arr = 10;时,变量arr未声明未定义,就会报错