函数声明的提升

函数声明的提升

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

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

1回答
好帮手慕然然 2021-05-11 11:18:43

同学你好,同学的理解基本上是可以的。不过表述不太全面,建议参考以下思路再理解一下:

在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 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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