我正在尝试使用主要提供商之一进行在线聊天。他们建议我嵌入如下代码:
<script type="text/javascript">
function embedScriptInsideHTMLtags() {
// responsible code
}
{
embedScriptInsideHTMLtags();
}
</script>
我的问题是,上面和下面之间有什么区别:
<script type="text/javascript">
function embedScriptInsideHTMLtags() {
// responsible code
}
embedScriptInsideHTMLtags();
</script>
第一个示例正在使用所谓的block statement。在这种情况下,两个示例没有区别。通过MDN链接:
以var声明的变量或在非严格模式下由函数声明创建的变量do not具有块范围。块中引入的变量的作用域为包含的函数或脚本,并且设置变量的效果将持续到块本身之外。换句话说,block语句不会引入作用域。
但是在严格模式
用let和const声明的标识符确实具有块范围
和
在严格模式下,从ES2015开始,块内部的功能仅限于该块。在ES2015之前,严格模式下禁止块级功能。
您必须了解访问var外部块与访问let和const外部块之间的区别是不可能的,而其他则不能。
您的代码没有任何区别,但
<script>
function embedScriptInsideHTMLtags() {
// responsible code
return 'something';
}
{
const b=embedScriptInsideHTMLtags();
}
const c= embedScriptInsideHTMLtags();
</script>
在这里您可以从外部或其他脚本访问c,但是b将不可访问。就您而言,如果您只是调用一个函数,那么它没有任何区别。
[其他人已经回答了您的特定问题,但是我也想指出,W3C现在建议您从JS <script>
标记中省略type属性,并且自HTML5规范问世以来就已经存在。该规范鼓励开发人员不要像text/javascript
那样在标记中使用冗余的MIME类型。当您使用脚本标签时,只写不带任何属性的<script>
。您可以从MDN文档中的脚本标签中阅读有关此内容的信息:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script#attr-type
类似地,当将<link>
标记用于样式表(与rel="stylesheet
一起使用时,您不再需要使用type="text/css"
。由于CSS是Web上唯一可用的样式表类型,因此现在样式表的type属性为您可以从MDN文档中了解有关此内容的更多信息:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#attr-type