JavaScript的分组操作符如何工作?
1 + 2;
(1 + 2);
function(){ return 1} + "text"; // SyntaxError
(function(){return 1} + "text");
Run Code Online (Sandbox Code Playgroud)
鉴于上述代码,我有以下问题:
1 + 2;没有语法错误,而function(){ return 1} + "text"引发SyntaxError?(function(){return 1} + "text")修复语法错误?Bar*_*mar 25
当function它位于语句的开头时,它被视为命名函数定义的开头,它应该类似于:
function someName() { return 1; }
Run Code Online (Sandbox Code Playgroud)
这是一个语句,而不是表达式,因此它不能用作更大表达式的一部分.
事实上,没有名字的声明是无效的.您从以下位置收到语法错误:
function() { return 1}
Run Code Online (Sandbox Code Playgroud)
一个人.
但是当你把它放在括号后面时,它不再是一个语句的开头,所以它是一个函数表达式,它将函数作为一个值返回.然后它可以用作更大表达式中的子表达式.
它不是分组运算符,而是它不在语句的开头.例如,你也可以写:
var foo = function() { return 1 } + "text";
Run Code Online (Sandbox Code Playgroud)
hug*_*omg 14
这1+2;是在大多数语言中使用C语言的语法.Javascript中允许的一种语句是一个只包含表达式的语句.这是为了允许只包含函数调用的foo();语句,例如或赋值语句x=5;.是的,Javascript中的赋值被认为是表达式而不是语句,这就是为什么你被允许在脚中射击并将赋值放在if语句条件(经典=vs ==bug)中.最后,编译器很难禁止无用的表达式语句,例如1+2;仍然允许foo()和x = 5;.
在function(){}VS (function(){})的是一个Javascript怪癖.Javascript在"函数声明语句"和"函数表达式"的语法中有不同的规则.在第一个示例中,函数被解析为语句,不能添加到其他内容中.在第二个中,括号使函数被解析为表达式,这允许将其添加到其他事物中.
这就是为什么"自调用函数模式"总是在匿名函数中添加一对括号.
(function(){
...
}())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1690 次 |
| 最近记录: |