今天遇到一個很有意思的問題「聲明函數有些以分號結尾,有些不以分號結尾,有什麼不同」
舉個例子, 是否有分號,取決於下一行執行代碼,是否有類似()
自執行函數
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