JavaScript的立即执行函数之前一定要加分号!!!

今天遇到一道有意思的题目,具体如下:

请问以下代码的输出结果是什么?()

var a = 10
(function(){
	console.log(2);
})()

A. 输出10
B. Error:10 is not a function
C. a is not defined
D. 输出2

不知道会不会有小伙伴像我一样直接选了D,经过我验证后发现正确答案是B。
在这里插入图片描述
为什么会是这样呢,我尝试在var a = 10;后面加了分号后得到了D选项的结果,但是此时我仍然不明白为什么浏览器把10当作了函数,于是我就想一探究竟,难道给a变量赋值一个函数就正确了吗?然后我就又写了下面这样的代码:

var a = function b(){}
(function(){
	console.log(2)
})()

结果这次的输出结果也不是想要的样子
在这里插入图片描述
然后我在var a = function b(){};后面加了分号,结果又对了
然后我去查看了一下ECMAScript的语言规范,ECMAScript具有自动分号插入规则:
在这里插入图片描述
大致意思就是在上面的代码中不会进行自动插入分号,立即执行函数相当于被这样解析:

var a = 10( function(){ console.log(2) } )()

这样看起来是不是就明显了许多,所以会报错:10 is not a function
所以在经常会发现有些脚本写了立即执行函数前面都要写个分号,就是怕出现这样的情况。

最后附上:ECMAScript的语言规范
在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值