声明函数有些以分号结尾,有些不以分号结尾,有什么不同
今天遇到一个很有意思的问题「声明函数有些以分号结尾,有些不以分号结尾,有什么不同」
举个例子, 是否有分号,取决于下一行执行代码,是否有类似()
自执行函数
1.无分号声明
const foo = function() {
console.log("first");
} // 结尾没有分号,遇到下面的代码
//执行无问题
(() => console.log("first"))();
2.有分号声明
const foo = function() {
console.log("first");
}; // 结尾有分号,遇到下面的代码
//执行无问题
(() => console.log("first"))();
由1
和2
我们可以看出来,有代码块 {}
的声明,有无分号都无问题,js编译和执行都ok
3.无分号声明
const foo = () => console.log("first") // 结尾没有分号,遇到下面的代码,报错无法执行
(() => console.log("first"))();
4.有分号声明
const foo = () => { console.log("first") }; // 结尾有分号,遇到下面的代码,无问题
(() => console.log("first"))();
由3
和4
可以看出来,代码块{}
之后又无分号,跟着的下一行自执行函数都可以正常运行,但是如果没有{}
代码块+下一行有自执行函数,则报错
比如如下错误实例
const a = [1,2,3,4] // 结尾无分号,遇到下一行报错
(() => console.log("error"));
//ncaught TypeError: [1,2,3,4] is not a function
at <anonymous>:2:1