正在回答 回答被采纳积分+1
2回答
好帮手慕星星
2021-11-10 16:08:07
同学你好,从上到下执行代码后,a不再是函数,所以a()调用报错。解析如下:
相同名称的变量和函数名,预解析的时候,提升保留的是最后一个函数体,也就是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积分~
来为老师/同学的回答评分吧
0 星