two javascript snippet

今天微博上ruanyf发了一条微博,代码段如下:

// 代码片段一
x = 1;<!-- x = 3;
--> x = 2;
console.log(x);

// 代码片段二
function countdown(n) {
while(n --> 0)console.log(n);
}
countdown(5);

第一个评论是这个:這不是傳說中神奇的-->操作符嘛,又叫做趨近操作符.我读书少,趨 这个字没认出来,学了一段时间的js,也没看到过—>这个操作符,代码片段二中的可以理解成-->的合体,就很好理解了,答案也就出来了,不过第一个直接把我绕到坑里去了。

后面搜索了一番,牵涉到了html注释和js的注释,见这里,js里面的注释除了///**/还有第三种<!--,以前有一种写法是为了兼容不支持js的浏览器写的,如下面的代码:

<script language="JavaScript">
<!--
Here you put your JS code.
Old browsers will treat it
as an HTML comment.
//-->

</script>

代码中除了script标签所在行的第一行和最后一行都被js视为行注释。是不是有一种理由认为代码片段一中的-->是行注释.,找到了依据,见这里。这样子的话,下面代码应该输出1:

x = 1;
--> x = 2;
--> x = 3;
console.log(x);

试一下,输出1,是够神奇的。