0

我正在尝试使用主要提供商之一实现在线聊天。他们建议我嵌入如下代码:

<script type="text/javascript">
  function embedScriptInsideHTMLtags() {
    // responsible code
  }
  {
    embedScriptInsideHTMLtags();
  }
</script>

我的问题是,上面和下面有什么区别:

<script type="text/javascript">
  function embedScriptInsideHTMLtags() {
    // responsible code
  }  
  embedScriptInsideHTMLtags();
</script>
4

3 回答 3

2

第一个示例是使用所谓的块语句。在这种情况下,两个示例没有区别。根据 MDN 链接:

用 var 声明的变量或在非严格模式下由函数声明创建的变量没有块作用域。块中引入的变量的作用域是包含函数或脚本,设置它们的效果会持续到块本身之外。换句话说,块语句不引入范围。

但在严格模式下

用 let 和 const 声明的标识符确实具有块作用域

在严格模式下,从 ES2015 开始,块内的函数的作用域是该块。在 ES2015 之前,严格模式下禁止块级函数。

于 2019-12-16T14:23:13.350 回答
2

您必须了解访问块外的 var 和访问块外的 let 和 const 之间的区别,一个是可能的(var),另一个是不可能的。

您的代码没有任何区别,但是

<script>
  function embedScriptInsideHTMLtags() {
    // responsible code
    return 'something';
  }
  {
    const b=embedScriptInsideHTMLtags();
  }
  const c= embedScriptInsideHTMLtags();
</script>

在这里,您可以从外部或其他脚本访问 c,但无法访问 b。在您的情况下,如果您只是调用一个函数,那么它没有任何区别。

于 2019-12-16T14:24:23.097 回答
2

其他人已经回答了您的具体问题,但我还想指出,W3C 现在建议您从 JS<script>标记中省略 type 属性,并且自 HTML5 规范于多年前问世以来就已开始。该规范鼓励开发人员不要按原样在标签中使用冗余的 MIME 类型text/javascript。当您使用包含 JavaScript 代码的脚本标签时,您可以只编写<script>不带任何属性的代码。您可以从脚本标签的 MDN 文档中了解它

类似地,当<link>为样式表使用标签时(使用rel="stylesheet,您不再需要使用type="text/css"。由于 CSS 是 Web 上唯一可用的样式表类型,样式表的 type 属性现在是多余的。您可以从MDN阅读更多相关信息链接标签的文档

于 2019-12-16T14:43:03.557 回答