鉴于我可能是明年年前年后开始跳槽,所以觉得可以先看看一些好玩的面试题目。
今天看的是这篇 让我印象深刻的javascript面试题
预解析
里面一开始先给了两个题目:
console.log(a)
a();
var a=3;
function a(){
console.log(10)
}
console.log(a)
a=6;
a();
以及
alert(a)
a();
var a=3;
var a=function(){
alert(10)
}
alert(a)
a=6;
a();
仔细比较之后可以发现,这两者的区别在于函数的命名方式不一样,这也会造成两者的结果有不同。
知识点如下:
- 函数声明优先于变量声明。
- 预解析是把带有var和function关键字的事先声明,但不会赋值。
重新再来看一下,主要的点就是函数声明优先于变量声明,以及 function a (){}
时,它会完整声明在作用域顶部。
所以最后结果分别是
line1.
function a(){
console.log(10)
}
line2.
10
line7.
3
line9.
报错 VM146:9 Uncaught TypeError: a is not a function
line1.
undefined
line2.
报错 VM146:2 Uncaught TypeError: a is not a function
其实第二段接下去也已经没有往下探究的必要了,后面的如果没有报错,alert(a) 的结果就是函数本身然后第9行再次报错。这个就不详述了。
在文中的2-2中,讲的其实是以下知识点:
- 变量只在作用域中提前
- 在函数体内,参数的优先级高于变量
- 在函数中修改外界变量时,如果函数有参数同名,修改的是参数,不是外界变量。
之后的一些都很零散,没什么特别要记录的东西,友情提示,有时间的话看一下评论,里面有很多东西,以及一些讨论,如果你觉得上述的对你有帮助的话,评论还是值得一看的。