2017-08-14读书笔记(面试题学习)

鉴于我可能是明年年前年后开始跳槽,所以觉得可以先看看一些好玩的面试题目。

今天看的是这篇 让我印象深刻的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(); 

仔细比较之后可以发现,这两者的区别在于函数的命名方式不一样,这也会造成两者的结果有不同。

知识点如下:

  1. 函数声明优先于变量声明。
  2. 预解析是把带有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中,讲的其实是以下知识点:

  1. 变量只在作用域中提前
  2. 在函数体内,参数的优先级高于变量
  3. 在函数中修改外界变量时,如果函数有参数同名,修改的是参数,不是外界变量。

之后的一些都很零散,没什么特别要记录的东西,友情提示,有时间的话看一下评论,里面有很多东西,以及一些讨论,如果你觉得上述的对你有帮助的话,评论还是值得一看的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容