1
381
它不起作用,因为它被解析为
当您用括号将其括起来时,它将被评估为
A的语法
和
你可以看到
或 命名 函数表达式:
括号(正式称为 the Grouping Operator )只能环绕表达式,并计算函数表达式。 这两种语法产物可能不明确,并且看起来完全相同,例如:
解析器知道它是否是
在上面的示例中,第二个是表达式,因为 Comma operator 也只能处理表达式。
另一方面,
应避免使用块内的函数,因为它们可能导致不可预测的行为,例如:
上面的代码实际上应该产生一个
Mozilla实现——Rhino、Spidermonkey——有不同的行为。他们的语法包含
非标准
函数语句,表示函数将在
运行时间
,而不是分析时,就像它发生在
函数可以用不同的方式声明, compare the following : 1-用 Function 分配给变量的构造函数 乘 :
2-名为的函数的函数声明 乘 :
3-分配给变量的函数表达式 乘 :
4-命名函数表达式 函数名 ,分配给变量 乘 以下内容:
|
2
45
尽管这是一个古老的问题和答案,但它讨论了一个至今仍让许多开发人员陷入循环的主题。我无法计算我采访过的那些不能告诉我函数声明和函数表达式之间区别的javascript开发人员候选人的数量。 和 他不知道什么是立即调用的函数表达式。 不过,我想提一件非常重要的事情,那就是,即使premasagar给了它一个名称标识符,它的代码片段也不会工作。
这不起作用的原因是JavaScript引擎将其解释为一个函数声明,后面是一个完全不相关的分组运算符(不包含表达式)和分组运算符 必须 包含表达式。根据javascript,上面的代码片段相当于下面的代码片段。
我想指出的另一件事可能对某些人有用,那就是在代码上下文中,除了函数定义本身之外,为函数表达式提供的任何名称标识符几乎都是无用的。
当然,在调试代码时,在函数定义中使用名称标识符总是很有帮助的,但这完全是另外一回事…-) |
3
13
伟大的答案已经发布。但我要注意的是,函数声明返回一个空的完成记录:
这个事实不容易观察到,因为尝试获取返回值的大多数方法都会将函数声明转换为函数表达式。然而,
调用空的完成记录是没有意义的。这就是为什么
但是,如果将函数括在括号中,它将成为一个函数表达式:
函数表达式返回一个函数对象。因此你可以称之为:
|
4
7
在javascript中,这称为 Immediately-Invoked Function Expression (IIFE) . 要使其成为函数表达式,必须:
否则,它将被视为函数定义,然后您将无法通过以下方式同时调用/调用它:
以上将给您带来错误。因为您只能立即调用函数表达式。 这可以通过以下两种方式实现: 方式1:
方式2:
方式3:
方式4:
以上所有操作都将立即调用函数表达式。 |
5
3
我还有一句话要说。您的代码只需稍作更改即可使用:
我使用上述语法而不是更广泛的版本:
因为我没能让缩进正确地用于VIM中的javascript文件。似乎Vim不喜欢左括号内的花括号。 |
6
0
也许更短的答案是
是一个 函数显式声明 那个 定义 (匿名)函数。附加的()-对(解释为表达式)不应出现在顶层,只应出现文本。
是在 表达式语句 那个 调用 匿名函数。 |
7
0
以上是有效的语法,因为括号内传递的任何内容都被视为函数表达式。
上面的语法无效。因为Java脚本语法分析器在函数关键字后面查找函数名,因为它找不到任何东西,所以它抛出了一个错误。 |
8
0
它们可以与参数参数一起使用,例如
结果是7 |
9
0
这些额外的括号在全局命名空间和包含代码的匿名函数之间创建额外的匿名函数。在javascript中,在其他函数中声明的函数只能访问包含它们的父函数的命名空间。因为在全局范围和实际代码范围之间有额外的对象(匿名函数),所以不会保留范围。 |
Softly · 单选按钮未按预期取值 1 年前 |
SlickRed · 我无法使用JS关注HTML元素 1 年前 |
assembler · Nextjs没有处理发布请求 1 年前 |
BADRUM · 执行两个获取功能后,如何导航回页面? 1 年前 |
Toniq · javascript为php保存多维数组 1 年前 |