函数声明的提升
console.log(a);
var a=1;
console.log(a);
function a(){
console.log(2);
}
console.log(a);
function a(){
console.log(4);
}
console.log(a);
a();
结果:
ƒ a(){
console.log(4);
}
1
1
1
Uncaught TypeError: a is not a function
说明:函数的声明可以提升,并且同名函数后面的覆盖前面的,所以第一个打印的结果是一个函数:
当a赋值后,a就不是函数名了,而是一个变量a,所以打印结果是1,继续打印a的值没变,所以后面两个还是1,最后函数的调用不可以用
正在回答 回答被采纳积分+1
同学你好,同学的理解基本上是可以的。不过表述不太全面,建议参考以下思路再理解一下:
在js中变量和函数都存在提升,此段代码中既有函数声明也有变量声明,js规定函数声明优先提升,后提升的会覆盖先提升的,此时提升后a的结果为: function a(){ console.log(4);}。
函数提升完毕后开始变量提升,但js又规定变量声明提升,不能覆盖提升的函数,此时提升后a的结果还是为:function a(){ console.log(4);}
当变量声明和函数声明全部提升完毕后,开始按照自上而下顺序执行js语句:
所以,第一个console.log打印的结果为function a(){ console.log(4);}。
当执行a=1代码后,此时a中存放的是一个数值,不再是一个函数,所以最后将其当做函数调用时会报语法错误。
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星