簡體   English   中英

如果忽略換行符,JavaScript如何解析單行注釋?

[英]How does JavaScript parse single line comments if it ignores newlines?

編寫JavaScript小書簽時,不能使用//因為JavaScript代碼被視為一行。 您必須改用/* ... */ 這對我來說沒有意義,因為即使忽略了換行符,您也可以在常規腳本中使用//

《權威指南》 第2.3節

JavaScript會忽略程序中令牌之間出現的空格,制表符和換行符...

然后,在《權威指南》 第2.5節

... // //和行尾之間的任何文本均被視為注釋,並被JavaScript忽略...

這些說法似乎是矛盾的。

根據2.3節 ,由於忽略了換行符,因此普通腳本幾乎也就是JS的一行。 有人可以向我解釋為什么//在普通腳本中可以實現,但在書簽中卻不能實現嗎?

讓我強調一下第一引號的一部分

JavaScript會忽略程序中令牌之間出現的空格,制表符和換行符

程序分為令牌。 例如下面的程序

var x = "abc123";

有5個令牌,分別是varx="abc123"; 如果您在標記之間放置更多空格,

var    x     =    "abc123"       ;

沒關系 但是,如果您在令牌中放置空格,那么它可以更改程序。 例如,

va r x = " a b c 12 3";

不編譯。

之所以如此,是因為這兩種說法並不矛盾。 注釋是被忽略的單個標記。 如果在注釋的中間放置換行符,則不是在程序的標記之間放置空格,而是在標記的中間放置空格。

//注釋會忽略該行的其余內容。 由於書簽僅包含1行,因此您將注釋掉//之后的所有內容。 在普通腳本中,您可以有很多行,因此不會有相同的問題。

如果您好奇如何指定,這是ECMAScript 5規范中語法相關部分

SingleLineComment ::
   // SingleLineCommentCharsopt

SingleLineCommentChars ::
   SingleLineCommentChar SingleLineCommentCharsopt

SingleLineCommentChar ::
    SourceCharacter but not LineTerminator

因為小書簽是單行腳本,所以常規腳本中可以包含多行。

2.3節有點模糊。 在某些情況下,空格確實很重要,但是//僅告訴處理器忽略該行的其余部分。

如果您在小書簽中使用// ,它將在那里立即停止處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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