为什么第二个会报错呢?

为什么第二个会报错呢?

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

预解析完了之后,一行一行的解毒代码,显示var a=1;然后是function a(){}那这个时候不是应该函数干掉前面的var a=1;吗?为什么会报错

正在回答 回答被采纳积分+1

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

3回答
小丸子爱吃菜 2017-12-04 15:29:35

1、在预解析时,如果变量名与函数名相同,那么变量名会被干掉,只留下函数。

2、如果函数名与函数名相同,变量名与变量名相同,那么谁在后面就保留谁。

3、执行代码时,只要两个相同的变量名都是全局的或者都是局部的,那么都是保留后者。

所以在写代码时,尽量不要出现变量名相同,或者变量名与函数名相同的情况,老师这里只是举例说明,让大家更好的理解预解析。

小丸子爱吃菜 2017-12-04 13:43:56

当开始逐行执行时,等执行到a()的时候,会因为a是个数值,a是1,不再是函数而报错。

课程中老师讲的很清楚了,建议再将这两节课好好看一下~


  • 提问者 朱先生3559133 #1
    我看了三遍了,我现在并不是不理解为什么会报错,我就是对于执行到哪里的时候,或者说是在什么情况下,后声明的变量不会覆盖前面声明的同名变量,什么时候又会覆盖
    2017-12-04 14:17:02
小丸子爱吃菜 2017-12-03 12:28:35

function声明的函数会在预解析的时候就渲染,然后再一行一行的从新研读代码,先给变量a赋值数值1,下面的2个function语句都不再执行。等执行到a()的时候,会因为a是个数值,不再是函数而报错。

祝学习愉快!

  • 提问者 朱先生3559133 #1
    也就是说在预解析的时候function a(){}会覆盖之前的var a=1;但是在一行一行解读代码的时候,function a(){}不会执行,也就不会覆盖a=1而是直接跳过,等代码解读到执行函数a()的时候,开始一行一行的执行function a(){}里面的代码,是这样吗
    2017-12-04 11:29:18
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
进击JavaScript核心 2018
  • 参与学习       466    人
  • 提交作业       74    份
  • 解答问题       635    个

JavaScript不仅能实现静态页面到动态特效的转变,还能完成数据的动态交互,但是关于js到底功能有多强大,大家还是有所期待的,本路径将带你深入到js中,一一揭开JavaScript的神秘面纱。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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