为啥在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的旧版浏览器就看不到了。 这在现在可能几乎没用了。
请注意,它还需要在开头添加<!--
才能使其成为评论。
阅读:http://lachy.id.au/log/2005/05/script-comments
【讨论】:
教程并没有告诉我这是没用的,让我想知道如何在非 js 浏览器中隐藏脚本开头的两个斜杠,如//<!-- script... //-->
非 js 浏览器除了向用户显示它并破坏我原本精彩的页面(在黄色背景上有字幕和其他酷红色文本)之外,还能做什么?【参考方案4】:
如果您注意到,您通常还可以在脚本前看到<!--
。
使用该语法,因此不支持 Javascript 的浏览器将忽略这些脚本的正文。
实际上,在html中,任何被<!--
和-->
包围的东西都被认为是评论
【讨论】:
【参考方案5】:如果您正在验证您的 html 代码,它也很有用,因此 js 不会显示为无效的 html 标记。然而,正如每个人都提到的,它已经相当过时了。我个人尝试永远不要使用内联 javascript,总是在可以缓存的外部文件中,这使得这种编码风格毫无用处
【讨论】:
【参考方案6】:-
对于不理解 JavaScript 或手动关闭 JavaScript 的浏览器,这些开始
<!--
和结束 html_comment_tags -->
将有助于将脚本 > / ? < & ^ % # ) ! - (
中的 bad_data 注释掉
如果浏览器理解 javascripts,它不会解析最后一个 comment_ending 标签-->
,因为 //
放在 html_comment_end 标签-->
之前,如果浏览器不理解 //
javascript 的注释标签的含义(仅仅是因为 jscript 已关闭)然后它显然会以通常的方式解析 -->
并删除 <script></script>
内的所有内容,包括 //
【讨论】:
以上是关于为啥在javascript中使用“//-->”的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 jQuery 脚本中使用 *//<![CDATA[* 和 *//]]>*? [复制]
为啥在运行时添加 <script> 标签不会加载 javascript 文件? (使用 react.js)
为啥我不能在 JavaScript/ES6 中使用带有箭头函数的`new`? [复制]