[英]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個令牌,分別是var
, x
, =
, "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.