[英]Why is semicolon required for this statement?
下面的代碼返回一個錯誤,指出“ console.log(...)不是函數”
if (4<5) console.log('hi')
(4<5) ? console.log('hi') : console.log('bye')
以下代碼不返回任何錯誤
if (4<5) console.log('hi')
if (4<5) console.log('hi')
為什么會這樣呢?
在第一行的末尾沒有分號的情況下,代碼嘗試將第一個console.log
返回值用作函數,並使用參數4<5
調用; 如果您刪除換行符,這會更清楚:
if (4<5) console.log('hi')(4<5) ? console.log('hi') : console.log('bye')
// ^^^^^^^^^^^^^^^^^^^^^^---- looks like calling `console.log` and then
// using the result as a function
每當您將省略分號(這意味着您要依靠糾錯機制 1 )與表達式語句結合使用時,都有這種可能性。 由於表達式語句從本質上講就是表達式,因此如果解析器可以在先前的表達式或語句中使用它們,則它將。
FWIW, astexplorer.net是我最近發現的一個很酷的工具(感謝Babel項目)。 這是一個交互式語法樹瀏覽器,可以使用多個解析器中的任何一個來解析您的代碼,並確切地告訴您它是如何解析的。 從github帳戶開始,它是由我們自己的Felix Kling啟動的。
1 引用Brendan Eich的話 :
ASI(正式而言)是一種語法錯誤糾正程序。 如果您開始像通用通用換行規則那樣進行編碼,則會遇到麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.