5

注释是在解析之前从源代码中直接删除,还是可以算作换行符并在某些情况下破坏连续性?

'foo'.replace(/f/, 'b') //f->b
     .replace(/o/, 'a') //o->a
     .replace(/o/, 'r') /*o->r*/ ;

'foo'.replace(/x/, /*matches "x"*/ 'y');

var foo = ( true !== false ) ? // bikeshed
          'bar' : /*if they're equal, which they won't be, we'll want 'baz'*/ 'baz';

你知道,因为他们说空格是“安全的”和“微不足道的”或其他什么,但我们都知道有例外。评论真的安全吗?

4

2 回答 2

5

它们在解析过程中被忽略,如果解析之前它们被剥离,解析器将需要扫描输入两次。

但是,行尾的 LineTerminator 不被认为是单行注释的一部分;它被词汇文法单独识别,并成为句法文法输入元素流的一部分。这一点很重要,因为它暗示了单行注释的有无不影响自动分号插入的过程

ES5 规范的评论

源代码被标记化,就好像评论不存在一样。

于 2012-09-30T05:55:52.167 回答
3

是的,评论是安全的。

(话虽如此,我已经看到一些损坏的服务器端 HTML 缩小器,它们不知道内联 JavaScript 是什么,并删除了所有换行符。以//注释整个脚本开头的注释。)

于 2012-09-30T05:55:47.233 回答