为什么添加</script>注释会破坏解析器?这是一个错误还是我忽略了文档中的某些内容?
我在Chrome,Firefox,Opera,Internet Explorer中测试了它们,它们都产生了相同的结果.
单行评论:
function Foo(){
// </script>
alert("bar");
};
Foo();Run Code Online (Sandbox Code Playgroud)
多行评论:
function Foo(){
/*
</script>
*/
alert("bar");
};
Foo();Run Code Online (Sandbox Code Playgroud)
mck*_*k89 101
这是因为W3C定义的HTML解析器与JavaScript解析器完全分离.在之后<script>的标签,它看起来的是,关闭</script>,无论它的内部意见或字符串,因为它把JS代码作为普通的文本.
小智 33
HTML解析器不解析JavaScript.它只解析由元素<tag>和</tag>标记表示的HTML元素.它不知道某些东西是JavaScript评论.当它看到</script>结束标记时,它假定脚本元素正在关闭.在字符串</script>出现的任何上下文中都会出现相同的情况 例如,console.log("</script>")会产生相同的行为.
这是一个非常好的理由不嵌入脚本的HTML里面,而是他们在外部包括.
您可以HTML转义嵌入式JavaScript代码
<script type="text/javascript">
<!--
function Foo(){
// </script>
alert("bar");
};
Foo();
//-->
</script>
Run Code Online (Sandbox Code Playgroud)
因此,HTML解析器将整个JavaScript代码视为HTML注释,JavaScript解释器忽略HTML注释行.