簡體   English   中英

為什么此語句需要分號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM