js经典面试题

2021-11-29  本文已影响0人  柠栀5102

一、

输出打印 undefined  \n  undefined  \n  12

var 定义的变量 会自动提升值所在作用域的顶端,如下:

二、

输出打印undefinde \n  12 \n 13

var变量提升后如下, 这个是时候其实只定义了一个全局变量a ,所以在fn()这个作用域中给 a 改变赋值  全局变量a 也是改变了的

三、

let 定义的变量是不存在提升的,并且,只要是当前作用域定义了该变量,那么就不能往上层寻找,所以上面两个输出打印都是报错的,如果删除前面两个输出,最后一个打印12

四、

这里的 a = 12 也是成立的,定义变量可以不使用任何关键字,但是在定义该变量之前,不能使用该变量(这是一种不规范写法)

但是直接定义也不会存在定义变量名提升,所以第一个输出打印是报错的,第二个也是,let定义的变量不提升且当前作用域定义了a 所以报错

五、

输出打印:10  

var定义的变量会提升到当前作用的最顶端,那么foo在执行if语句是就是undefined取非,执行foo = 10 ,如下:

六、

输出打印:1   因为这里bar()中的foo 没有重新用var定义所以 1 取非值是false,不执行foo = 10 的语句,当前作用域也没有重新定义 foo ,foo的值往上一层作用域找  值为1 

七、

输出打印:11 \n  12  \n  0

这里需要注意的是  b()函数中使用的 n  ,是  a()函数这个作用域中定义的 n,  而最后一个输出打印使用的 n  是全局变量 所以输出打印 0

八、

输出打印 10 \n  11 \n  3

九、

输出打印:undefined

十、

输出打印:3 \n  10 \n  undefined

如果调用函数中没有返回值  默认返回undefined

十一、

输出打印:5 \n  \n  6 \n  2

a++ 先返回a的值,后加一;++a 先加一,在返回a的值;

十二、

输出打印:[0,2,3,4]  \n  [100]

上一篇下一篇

猜你喜欢

热点阅读