当前位置: 首页 > 面试题库 >

为什么要在javascript中的每个函数之后使用分号?

公孙栋
2023-03-14
问题内容

我已经看到不同的开发人员在javascript函数中包含分号,而有些还没有。哪个是最佳做法?

function weLikeSemiColons(arg) {
   // bunch of code
};

要么

function unnecessary(arg) {
  // bunch of code
}

问题答案:

分号后 函数的声明没有必要的

a的语法FunctionDeclaration在规范中描述为:

function Identifier ( FormalParameterListopt ) { FunctionBody }

语法上没有分号,但可能想知道为什么?

分号用于将 语句 彼此分开,并且a FunctionDeclaration不是 语句

FunctionDeclarations在代码执行之前进行评估,是用来解释这种行为的 常用词

术语“函数声明”和“函数声明”通常会错误地互换使用,因为ECMAScript规范中没有描述函数声明,但是有一些实现在其语法中包括函数声明,特别是Mozilla,但同样是非标准的。

但是,始终建议在使用的地方使用分号FunctionExpressions,例如:

var myFn = function () {
  //...
};

(function () {
  //...
})();

如果在上面的示例中的第一个函数之后省略分号,则将获得完全不希望的结果:

var myFn = function () {
  alert("Surprise!");
} // <-- No semicolon!

(function () {
  //...
})();

第一个功能将立即执行,因为第二个功能的括号将被解释为Arguments函数调用的。



 类似资料:
  • 问题内容: 如果您不熟悉规则。这是关键点: 如果第一至第n 个 JavaScript程序形式的令牌是语法上有效,但第一至第n+1个ST令牌是不与存在n之间的换行符个令牌和第n+1ST令牌,则解析器试图插入n个令牌之间的虚拟分号后再次解析程序次和第n + 1 ST令牌。 该描述可能是不完整的,因为它没有解释@Dreas的示例。有人可以链接到完整的规则,还是可以查看示例为何使用分号?(我在JScrip

  • 问题内容: 我们可以通过两种不同的方式在JavaScript中执行函数表达式: 命名函数表达式(NFE) : 匿名函数表达式 : 而且两个都可以用调用。我真的看不到为什么/何时应该使用匿名函数以及何时应该使用命名函数表达式。他们之间有什么区别? 问题答案: 对于匿名函数表达式,该函数是匿名的从字面上看,它没有名称。您要为其分配变量的变量具有名称,但是该函数没有。 _(更新:这在ES5中是正确的。从

  • 问题内容: 原始问题: 当我的JavaScript调用的功能在页面下方而不是在调用页面的下方定义时,JSHint会抱怨。但是,我的页面是用于游戏的,在下载全部内容之前,不会调用任何函数。那么为什么订单功能出现在我的代码中很重要? 我在里面吟。看来我需要花另一天的时间才能重新排序六千行代码。使用javascript的学习曲线一点也不陡峭,但是非常糟糕。 问题答案: tl; dr 如果在加载完成之前不

  • 问题内容: 今天,当我发现一段Python代码使用内置函数 作为变量标识符来存储列表推导的结果并且没有引发错误时,我偶然发现了这一点,因此我尝试了以下操作: 希望当我问为什么在Python中允许这种行为时,这是一个有效的问题。 或者更好的是,如何确保内置函数的确是真实的而不是不说,因此不会被偶然评估? 问题答案: Python希望您对您的代码负责,这就是为什么。Python没有私有属性,没有受保护

  • 问题内容: 即使在不同的浏览器中,此代码也始终有效: 但是,我找不到关于为什么它应该起作用的单一参考。我首先在John Resig的演示文稿中看到了这一点,但仅被提及。那里或任何地方都没有解释。 有人可以启发我吗? 问题答案: 该声明是魔术,使它的标识符在代码块*中的任何内容执行之前就被绑定了。 这与带有表达式的赋值不同,后者以正常的自上而下的顺序求值。 如果将示例更改为说: 它将停止工作。 函数

  • 从当前目录的文档中获取的代码片段: 我注意到只有在之后添加分号,程序才不会编译如下错误: 为什么会这样?