为什么第二次输出会报错?

正在回答

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

3回答

程序在运行前要对a进行解析,程序中有两个a方法,解析过后a是第二个a方法对象,所以第一个输出结果是function a(){ document.write('a2'); };第二个输出执行时会报错,因为之前a已经复制成了1;最后一个输出输出的就是全局的a,值为1。

  • wykun 提问者 #1
    有几个疑问,(1).当第一次预解析的时候,函数也可以写作var a = function{....},那么同名变量var重复定义了啊(2).在第一次预解析的时候为什么输出结果是function a(){ document.write('a2'); }呢?是因为覆盖了吗?也就是同名函数声明最后一个会覆盖之前的?
    2017-05-12 13:38:45
  • wykun 提问者 #2
    仔细又回头看了看视频,是不是因为这个声明函数在第一次预解析的时候就已经声明了,在逐行解读代码的时候因为已经预解析过,因此就直接跳过了.所以a = 1
    2017-05-12 13:44:39
  • wykun 提问者 #3
    但是还是不理解为什么当函数写作var a = function{....}的话,var可以重复同名定义,,求解答
    2017-05-12 13:49:00
金刚小仓 2017-05-25 18:26:13

哈哈,老师讲的已经很详细了。

Miss路 2017-05-12 17:00:50

我在第一遍的回答里面说的很清楚了,

第一:当写完这些代码之后会解析,不管你之前定义了a是1还是a1,他最后成了a2的输出那句,所以,第一个会输出function a(){ document.write('a2'); }。

第二个会报错,是因为前面写了var a=1;所以这里调用a方法就会报错。

第三个会输出1是因为a变量就是1,这里不是a方法,就是a变量。

祝学习愉快!

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

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

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

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

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

在线咨询

领取优惠

免费试听

领取大纲

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