声明函数有些以分号结尾,有些不以分号结尾,有什么不同

今天遇到一个很有意思的问题「声明函数有些以分号结尾,有些不以分号结尾,有什么不同」

举个例子, 是否有分号,取决于下一行执行代码,是否有类似()自执行函数

1.无分号声明

const foo = function() {
  console.log("first");
} // 结尾没有分号,遇到下面的代码

//执行无问题
(() => console.log("first"))();

2.有分号声明

const foo = function() {
  console.log("first");
}; // 结尾有分号,遇到下面的代码

//执行无问题
(() => console.log("first"))();

12我们可以看出来,有代码块 {} 的声明,有无分号都无问题,js编译和执行都ok

3.无分号声明


const foo = () => console.log("first") // 结尾没有分号,遇到下面的代码,报错无法执行
(() => console.log("first"))();

4.有分号声明

const foo = () => { console.log("first") }; // 结尾有分号,遇到下面的代码,无问题
(() => console.log("first"))();

34可以看出来,代码块{}之后又无分号,跟着的下一行自执行函数都可以正常运行,但是如果没有{}代码块+下一行有自执行函数,则报错

比如如下错误实例

const a = [1,2,3,4] // 结尾无分号,遇到下一行报错
(() => console.log("error"));

//ncaught TypeError: [1,2,3,4] is not a function
    at <anonymous>:2:1
原文地址:https://www.cnblogs.com/ae6623/p/15286446.html