大括号{}中的函数调用

问题描述 投票:0回答:3

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

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

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

<script type="text/javascript">
  function embedScriptInsideHTMLtags() {
    // responsible code
  }  
  embedScriptInsideHTMLtags();
</script>
javascript function curly-braces function-invocation
3个回答
2
投票

第一个示例正在使用所谓的block statement。在这种情况下,两个示例没有区别。通过MDN链接:

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

但是在严格模式

用let和const声明的标识符确实具有块范围

在严格模式下,从ES2015开始,块内部的功能仅限于该块。在ES2015之前,严格模式下禁止块级功能。


2
投票

您必须了解访问var外部块与访问let和const外部块之间的区别是不可能的,而其他则不能。

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

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

在这里您可以从外部或其他脚本访问c,但是b将不可访问。就您而言,如果您只是调用一个函数,那么它没有任何区别。


2
投票

[其他人已经回答了您的特定问题,但是我也想指出,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

© www.soinside.com 2019 - 2024. All rights reserved.