请老师指导,解析机制的疑惑。

请老师指导,解析机制的疑惑。

为什么执行的时候 function a(){

console.log(4)

}

要跳过?解析的时候,解析的结果不就是这个函数吗,怎么反而跳过不执行了呢。

还有 解析的时候var a 都被干掉了,怎么还能被执行呢?http://img1.sycdn.imooc.com//climg/5c3aab6b00011bae09541214.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好,预解析遵循的原则有如下几条:

1、预解析的时候会将var 声明的变量提前赋值为undefined,以及函数体提前。

2、当变量名称与函数体名称冲突的时候,将函数体提前。

3、当函数体名称相同的时候,将后面函数体提前。

代码中:

http://img1.sycdn.imooc.com//climg/5c3bf0fc00015a9406570475.jpg

从上到下执行代码,第一行代码输出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是正常执行的。

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师