为啥在javascript中使用“//-->”

Posted

技术标签:

【中文标题】为啥在javascript中使用“//-->”【英文标题】:Why use "//-->" in javascript为什么在javascript中使用“//-->” 【发布时间】:2011-03-23 06:03:20 【问题描述】:

我已经看到这个标签在 javascript 函数之后使用了十多年,从来没有问过为什么。在这段时间我看过的大多数教程中都可以看到它,但我通常将其省略......它似乎并没有以某种方式产生影响。谁能告诉我为什么要使用它?

如果只是为了表示一个 javascript 函数的结束,那么右大括号是否就足够了?如果是一系列函数,则使用结束脚本标签。

我怀疑我需要一个示例,但对于所有其他也想知道它的用途的读者,这里有一些代码:



function helloWorld() 
   document.write('Hello World');

//-->

提前致谢!

【问题讨论】:

正如@del.ave 在他的回答中指出的那样,一个相关的做法是在 cmets 中使用 CDATA,我过去不得不使用它,以便我的 Xhtml 中的 JavaScript 通过验证。 【参考方案1】:

这是从不支持 JS 的浏览器相当普遍的时代开始的。如果您将 JS 代码直接包含在 HTML 文件中,您将在代码周围包含 HTML 注释标记 (<!-- -->),这样那些浏览器就不会将其显示为页面的一部分。 // --> 的原因是 支持 JS 的浏览器不会尝试将结束 HTML 注释解释为 JS 代码的一部分。

【讨论】:

非常感谢!很抱歉没有尽快回复。【参考方案2】:

过去,一些浏览器不处理 javascript,因此为避免错误,您可以将 javascript 代码放在 HTML 注释块“”中。

今天,XHTML 标准说你应该像这样转义你的脚本

<script type="text/javascript">
<![CDATA[
... unescaped script content ...
]]>
</script>

对于 HTML,您不必这样做。参考:

http://www.w3.org/TR/xhtml1/
http://www.w3schools.com/tags/tag_script.asp

【讨论】:

非常感谢;这就是我一直在寻找的答案。我很抱歉没有尽快回复你。 =)【参考方案3】:

就是把代码注释掉,这样不支持JS的旧版浏览器就看不到了。 这在现在可能几乎没用了。

请注意,它还需要在开头添加&lt;!-- 才能使其成为评论。

阅读:http://lachy.id.au/log/2005/05/script-comments

【讨论】:

教程并没有告诉我这是没用的,让我想知道如何在非 js 浏览器中隐藏脚本开头的两个斜杠,如//&lt;!-- script... //--&gt;非 js 浏览器除了向用户显示它并破坏我原本精彩的页面(在黄色背景上有字幕和其他酷红色文本)之外,还能做什么?【参考方案4】:

如果您注意到,您通常还可以在脚本前看到&lt;!--

使用该语法,因此不支持 Javascript 的浏览器将忽略这些脚本的正文。

实际上,在html中,任何被&lt;!----&gt;包围的东西都被认为是评论

【讨论】:

【参考方案5】:

如果您正在验证您的 html 代码,它也很有用,因此 js 不会显示为无效的 html 标记。然而,正如每个人都提到的,它已经相当过时了。我个人尝试永远不要使用内联 javascript,总是在可以缓存的外部文件中,这使得这种编码风格毫无用处

【讨论】:

【参考方案6】:
    对于不理解 JavaScript 或手动关闭 JavaScript 的浏览器,这些开始 &lt;!-- 和结束 html_comment_tags --&gt; 将有助于将脚本 &gt; / ? &lt; &amp; ^ % # ) ! - ( 中的 bad_data 注释掉 如果浏览器理解 javascripts,它不会解析最后一个 comment_ending 标签--&gt;,因为 // 放在 html_comment_end 标签--&gt; 之前,如果浏览器不理解 // javascript 的注释标签的含义(仅仅是因为 jscript 已关闭)然后它显然会以通常的方式解析 --&gt; 并删除 &lt;script&gt;&lt;/script&gt; 内的所有内容,包括 //

【讨论】:

以上是关于为啥在javascript中使用“//-->”的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 jQuery 脚本中使用 *//<![CDATA[* 和 *//]]>*? [复制]

为啥在带有括号的 Javascript 事件处理函数中?

为啥在运行时添加 <script> 标签不会加载 javascript 文件? (使用 react.js)

为啥我不能在 JavaScript/ES6 中使用带有箭头函数的`new`? [复制]

为啥onclick处理程序在javascript中与innerHTML一起使用时不起作用[重复]

为啥在javascript中单击时未设置输入值?