return和return()有什么区别?
function a() { return 1; } function b() { return(1); }
我在Chrome的控制台上testing了上面的代码,并且都返回了1
。
function c() { return "1"; } function d() { return("1"); }
我也testing了上面的代码,并且这两个函数都返回了"1"
。
那么使用return
和return()
什么区别呢?
相同之间
var i = 1 + 1;
和
var i = (1 + 1);
那没什么。 括号是允许的,因为任何expression式都允许括号影响评估顺序,但在你的例子中,它们只是多余的。
return
不是一个函数,而是一个声明 。 它与其他简单的控制stream程语句(如break
和continue
在语法上相似,也不使用括号。
没有区别。
return
不是函数调用,而是语言语句。 你用圆括号做的只是将你的返回值分组,以便对它进行评估。 例如,你可以写:
return (x == 0);
在这种情况下,您返回语句x == 0
的值,根据x == 0
的值将返回布尔值true
或false
。
其实这里()
优先级更高,所以先评估一下:
在这里首先("1")
得到评估,按以下方式:
("1") ==> "1" ("1","2") ==> "2" ("1","2","3") ==> "3" ("1"+"2","2"+"2","3"+"2") ==> "32" (2+3+6) ==> 11
所以上述说法相当于:
return "1";
目视看
所以在function上基本没有什么区别,但是第一个解决方括号可能会慢一点点。
绝对没有区别。 如果你将看JS(ECMAScript) return语句的规范 。 在许多其他事情中,它告诉你:
返回[这里没有LineTerminator]expression式;
你可以提供expression式来return
。 expression式是hello
, Math.abs(x)
, yourCustomFunc(7)
,或者在你的第二种情况下,这可以是1
或(1)
。 式(1)
与(1)
相同, (((((1))))))
,甚至像(+(!(+(!1))))
这样的exception。
没有区别,括号是可选的。 请参阅MSDN :
return[(][expression][)];
可选的expression式参数是从函数返回的值。 如果省略,该函数不返回一个值。
您使用return语句来停止函数的执行并返回expression式的值。 如果省略expression式,或者没有从函数内部执行返回语句,那么调用当前函数的expression式将被赋值undefined。
return
是一个声明 关键字,它启动了return语句 , 而不是一个函数。
如前所述,额外的括号会影响评估顺序,但不会用于“执行”名为return
的函数。 这就是为什么这些线路没有任何问题:
return (1); var a = (1);
实际上,它们与这些行相同:
return 1; var a = 1;
return()
抛出一个语法错误的原因是由于下面一行抛出一个错误 (为了比较而包含返回语句)的确切原因:
return(); // SyntaxError: syntax error var a = (); // SyntaxError: syntax error
对于人类来说有很大的区别,对于Javascript引擎来说是零差别的。
return 1
是一个声明,我们需要立即退出函数yielding值为1。
return(1)
是伪装成白痴惯例的函数调用的同一个语句,你不必在Javascript中用括号插入空格。 如果你在生产系统中使用这样的代码,任何维护者会花费一些时间来决定你是否确实在代码库中有return()
函数,或者只是不知道return
关键字是。
正如许多其他人已经正确地说过的那样,括号除了“组”之外什么也不做,其中第一个数字的优先级高于“组”。
在return语句中,expression式的括号 已经内置。
在JavaScript中,与其他许多语言(如C,C ++,Java,Python)一样,return语句由两部分组成:关键字return
和一个(可选)expression式。 所以在任何情况下, 所有跟在return
关键字后面的内容首先被作为一个expression式求值 ,然后通过把控制权交给调用者来“执行”返回语句。
使用或不使用括号是一个风格问题 ,而大多数风格指南禁止他们像你的问题中引用的那样微不足道的情况,因为它使得返回错误地看起来像一个函数。