请老师指导,解析机制的疑惑。
为什么执行的时候 function a(){
console.log(4)
}
要跳过?解析的时候,解析的结果不就是这个函数吗,怎么反而跳过不执行了呢。
还有 解析的时候var a 都被干掉了,怎么还能被执行呢?
正在回答
你好,预解析遵循的原则有如下几条:
1、预解析的时候会将var 声明的变量提前赋值为undefined,以及函数体提前。
2、当变量名称与函数体名称冲突的时候,将函数体提前。
3、当函数体名称相同的时候,将后面函数体提前。
代码中:

从上到下执行代码,第一行代码输出a,现在a是一个函数,所以输出的结果为整个函数体。
第二行代码将a赋值为1,现在a是一个变量,结果为1。第三行输出a,结果就是1。
第4,5,6行代码是一个函数体,跳过,因为不是赋值。
第7行代码输出a,现在a仍然是变量1,所以输出结果为1。
第8行代码,将a赋值为3,现在a的结果为3。
第9行代码输出a,所以结果为3 。
第10,11,12行代码是一个函数体,跳过。
第13行代码输出a,现在a仍然是变量3,所以结果为3 。
第14行代码调用a,但是a是一个变量不是函数,所以会报错。
同学的疑惑是在执行代码的时候,函数体不执行吗?函数体需要调用才能执行,如果不调用,函数体不能覆盖变量,因为不是赋值。解析的时候是解析声明,函数体覆盖变量,但是执行代码的时候是赋值。所以a=1是正常执行的。
祝学习愉快!
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星