function a() { return 1; }
function b() { return(1); }
我在Chrome控制台中测试了上述代码,并且都返回了1
。
function c() { return "1"; }
function d() { return("1"); }
我还测试了上面的代码,两个函数都返回"1"
。
那么使用return
和return()
之间的区别是什么?
答案 0 :(得分:176)
与
之间相同var i = 1 + 1;
和
var i = (1 + 1);
即没有。允许使用括号,因为它们在任何表达式中都允许影响评估顺序,但在您的示例中它们只是多余的。
return
不是函数,而是语句。它在语法上类似于其他简单的控制流语句,如break
和continue
,它们也不使用括号。
答案 1 :(得分:21)
没有区别。
return
不是函数调用,而是语言语句。您使用括号所做的只是将返回值分组,以便对其进行评估。例如,你可以写:
return (x == 0);
在这种情况下,您将返回语句x == 0
的值,该值将返回布尔值true
或false
,具体取决于x
的值。
答案 2 :(得分:18)
实际上这里()
的优先级更高,因此它首先评估:
首先,("1")
以下列方式评估("1") ==> "1"
("1","2") ==> "2"
("1","2","3") ==> "3"
("1"+"2","2"+"2","3"+"2") ==> "32"
(2+3+6) ==> 11
:
return "1";
所以上述陈述相当于:
{{1}}
直观地看:
因此,功能基本上没有区别,但第二个可能是因为它首先解决括号而忽略不计。
答案 3 :(得分:9)
没有区别,括号是可选的。见MSDN:
return[(][expression][)];
可选的表达式参数是从函数返回的值。如果省略,则该函数不返回值。
使用return语句停止执行函数并返回表达式的值。如果省略了expression,或者没有从函数内执行return语句,则为调用当前函数的表达式赋值undefined。
答案 4 :(得分:9)
绝对没有区别。如果您将查看JS(ECMAScript)specification of return语句。在许多其他事情中,它告诉你:
返回[此处没有LineTerminator]表达式;
您可以向return
提供表达式。表达式为hello
,Math.abs(x)
,yourCustomFunc(7)
,或者在您的第二种情况下,这可以是1
或(1)
。评估后的表达式1
与(1)
相同,与(((((1))))))
相同,甚至与(+(!(+(!1))))
一样奇怪。
答案 5 :(得分:9)
return
是声明 a keyword that starts the return statement,不是函数。
如前所述,额外的括号会影响评估顺序,但不会用于“执行”名为return
的函数。这就是为什么这些线路没有任何问题的原因:
return (1);
var a = (1);
它们实际上与这些行相同:
return 1;
var a = 1;
return()
抛出语法错误的原因是出于确切原因the following line throws an error(包含用于比较的return语句):
return(); // SyntaxError: syntax error
var a = (); // SyntaxError: syntax error
答案 6 :(得分:6)
人类存在巨大差异,Javascript引擎存在零差异。
return 1
是一个语句,声明我们需要立即退出函数yielding值1。
return(1)
是一个伪装成函数调用的语句,它是一种愚蠢的约定,你没有义务在Javascript中的括号外插入空格。如果你在生产系统中使用这样的代码,那么任何维护者都会花费一些时间来确定你是否确实在代码库中的某个地方有return()
功能,或者只是不知道return
关键字的用途。
正如许多其他人已经正确说过的那样,括号除了“group”之外什么都不做,优先级高于Number
1的字面值。
答案 7 :(得分:4)
在return语句中,表达式周围的括号已经内置。
在JavaScript中,与许多其他语言(如C,C ++,Java,Python)一样,return语句包含两部分:关键字return
和(可选)表达式。因此,在任何情况下, return
关键字之后的所有内容首先评估为表达式,之后,返回语句为"执行& #34;将控件传回给调用者。
使用或不使用括号是问题的样式,而大多数样式指南禁止它们处理你问题中引用的琐碎案例,因为它使得返回错误地看起来像一个函数。
答案 8 :(得分:-1)
通过添加括号,我们确保javascript在返回后写入多个语句之前不插入分号, 以供参考:- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Automatic_semicolon_insertion
**ex:
return
a + b;
is transformed to
return;
a + b;
by ASI.
The console will warn "unreachable code after return statement".
To avoid this problem (to prevent ASI), you could use parentheses:
return (
a + b
);**
代码复制自: - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return