最后一个函数名加括号为什么会报错

最后一个函数名加括号为什么会报错

为什么a()会报错,去掉var a=3就没问题了,函数a和变量a之间有什么关联吗

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

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

2回答
好帮手慕星星 2021-11-10 18:30:24

同学你好,也不是绝对的,如果以赋值形式将函数赋给a,那么是可以调用的,例如:

https://img1.sycdn.imooc.com//climg/618b9f2e09b96c3404950236.jpg

自己测试下。

好帮手慕星星 2021-11-10 16:08:07

同学你好,从上到下执行代码后,a不再是函数,所以a()调用报错。解析如下:

https://img1.sycdn.imooc.com//climg/618b7cda09211d6f06260399.jpg

相同名称的变量和函数名,预解析的时候,提升保留的是最后一个函数体,也就是function a(){console.log(4)} 。所以从上到下执行代码:

  • 第一次输出a为提升的函数体

  • 接着将1赋值给a变量,第二次输出a值为1;

  • 跳过函数体(因为函数在调用的时候才会执行),第三次输出a值为1;

  • a被赋值为3,第四次输出a值为3;

  • 跳过函数体,第五次输出a值为3;

  • a现在是变量,当做函数调用会报错Uncaught TypeError: a is not a function 。


另外,如果去掉var a=3 ;最后调用也会报错,因为a的值还是变量,值为1,将所有的var 声明a都去掉就不会报错了。

自己测试理解下,祝学习愉快!

  • 提问者 沧海的腿毛 #1

    那么意思是a只要被定义成变量那么就不能当做函数调用了是吗

    2021-11-10 16:13:21
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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