Web前端开发之面试题全解析 一

第一题

对于这道题,存在的坑是this的指向问题,可能很多人一看题 就以为 是在浏览器运行,所以this指向window,但是也可能是在node环境下,而node环境下是没有window的,所以要区分是浏览器运行还是node环境下。

 第二题

对于粗心大意的初学者来说,可能会马上给出答案:b=3,又因为a=b,所以a=3;

正确的做法,应该是拆分出来:

b=3

var a=b;

需要注意的是这是在自执行函数里面的,所以a的声明只存在自执行函数里

而b由于自执行函数里没有声明,所以成为了全局变量

第三题

对于这道题,相信对很多小伙伴来说并不陌生,应该是见过许多遍了,但是人有粗心的伙伴会马上给出答案3个3,实际上答案是3个四,必须区分好结束循环时i的值时多少

若对这道题不清晰的或是想巩固这片知识的可以看这篇文章 :

做一名合格的前端开发工程师:Javascript加载执行问题探索

第四题

这道题重在考查 函数声明和普通变量声明的优先级关系,众所周知,函数声明的提升的优先级要高级普通变量 (如若这里有点不知所云,请看这篇文章:【JS】预编译(图解)

因此正确答案为

把这道题变一下,

这样的话会是什么结果了?到这里还是不能给出答案的话,建议还是认真看下这篇文章:

【JS】预编译(图解)

正确答案会报错:

第五题

这道题,第一次遇见的时候,我胸有成竹地填上了456,结果错的一败涂地,实际上答案是

这道题的坑在于f1的作用域,实际上f1的作用域是window而非f2。

第六题

通过上一题的踩坑后,对于这道题,我马上给出答案,因为f1无调用者,所以作用域都是window,而arguments[0]即f1,所以都输出100,万万没想到又是一个坑,arguments[0]()这里的作用域不再是window,而是arguments。

正确答案: