为了账号安全,请及时绑定邮箱和手机立即绑定

关于函数执行的问题

关于函数执行的问题

翻阅古今 2019-03-04 17:43:34
var a = 8;function a(){};console.log(a);为啥a不是function 而是8呢?
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

问题很好,题主看起来也有过思考。

这个问题涉及两个点,变量提升和函数声明。

1.变量提升
js中的变量提升,提的是声明。因此变量a只有声明被提升了,初始化依然处于原位置。而函数a则整体都提升了。

2.函数声明
对于function a(){},实际上分成了两部分,一是声明一个namea的函数,二是将这个函数赋给变量a

因此这段代码的运行过程是这样的
1.声明函数a,根据上文,实际是var a = function (){}(函数名为a)。这里已经声明了变量a并初始化
2.声明变量a,由于之前已经声明了a,因此这里会跳过声明。相当于变量a的变量提升没用了。
3.执行变量a的初始化,由于之前的声明,这里实际上等同于变量a的赋值

因此最后打印的a为8


查看完整回答
反对 回复 2019-03-08
?
三国纷争

TA贡献1804条经验 获得超7个赞

你需要了解2个概念:


javascript具备"头等函数(first-class function)"的特性,优先声明并且不会被后面的声明覆盖(注意这里只是说声明不会被覆盖)

运行时构建对象(先声明后赋值,可以理解为变量提升)

因此你的代码在被引擎解析之后如下:


function a(){}// 此时a被声明切赋值为函数

var a;// 此时的a依然是函数,因为函数是头等公民

a = 8;// 此时赋值,覆盖原来的函数

console.log(a);// 输出a的值,也就是8


查看完整回答
反对 回复 2019-03-08
  • 2 回答
  • 0 关注
  • 491 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信