return和return()有什么区别?

chr*_*ong 98 javascript

function a() { return 1; }
function b() { return(1); }
Run Code Online (Sandbox Code Playgroud)

我在Chrome的控制台中测试了上面的代码,两者都返回了1.

function c() { return "1"; }
function d() { return("1"); }
Run Code Online (Sandbox Code Playgroud)

我还测试了上面的代码,并返回了两个函数"1".

那么使用return和有return()什么区别?

Rem*_*ich 177

两者之间相同

var i = 1 + 1;
Run Code Online (Sandbox Code Playgroud)

var i = (1 + 1);
Run Code Online (Sandbox Code Playgroud)

那就是没有.允许使用括号,因为它们可以在任何表达式中影响评估顺序,但在您的示例中,它们只是多余的.

return不是一个功能,而是一个声明.它在语法上类似于其他简单的控制流语句,break并且continue也不使用括号.

  • @ chris97ong:return不是函数. (37认同)
  • 如果你把`return`变成了函数,你会如何从中返回一个值? (34认同)
  • A [*return statement*](http://ecma-international.org/ecma-262/5.1/#sec-12.9)后面可以跟一个表达式.返回必须在函数中,因此函数返回表达式的值,或者如果没有,则返回*undefined*. (12认同)
  • 这是一个很好的答案和一个很好的例子,但我认为值得补充的是,"回归"并不是主要答案中的一个功能 - 考虑到这是导致这个问题的误解的根源. (4认同)
  • @BiscuitBaker:我加了一点.当我记下这个简短的回答时,我做了*不*期望它得到50多个upvotes ... (3认同)
  • @ dan04`window ['return'] = function(x){return x;}`.`window ['return'](123)`返回123 :) (2认同)

alp*_*tis 21

没有区别.

return不是函数调用,而是语言语句.您使用括号所做的只是将返回值分组,以便对其进行评估.例如,你可以写:

return (x == 0);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您返回语句的值,该值x == 0将返回布尔值truefalse取决于值x.

  • [*return*](http://ecma-international.org/ecma-262/5.1/#sec-7.6.1.1)是一个表示[*return statement*]开头的关键字(http:// ecma -international.org/ecma-262/5.1/#sec-12.9). (6认同)

Zah*_*med 18

实际上这里的优先级()更高,所以它首先评估:

首先("1")通过以下方式评估:

("1")                     ==> "1"
("1","2")                 ==> "2"
("1","2","3")             ==> "3"
("1"+"2","2"+"2","3"+"2") ==> "32"
(2+3+6)                   ==>  11
Run Code Online (Sandbox Code Playgroud)

所以上述陈述相当于:

return "1";
Run Code Online (Sandbox Code Playgroud)

看得见:

viusal

因此,功能基本上没有区别,但第二个可能是一个可忽略的缓慢,因为它首先解决括号.

  • 超越顶部. (4认同)
  • 如果不是这种情况,为什么还要做出一个完全未经验证的断言,即“第二个可能会慢一些,可以忽略不计”? (2认同)

Eva*_*les 9

没有区别,括号是可选的.请参阅MSDN:

return[(][expression][)];
Run Code Online (Sandbox Code Playgroud)

可选的表达式参数是要从函数返回的值.如果省略,则该函数不返回值.

您使用return语句来停止函数的执行并返回表达式的值.如果省略了expression,或者没有从函数内执行return语句,则为调用当前函数的表达式赋值undefined.

  • 只有MS会认为在[*return statement*](http://ecma-international.org/ecma-262/5.1/#sec-12.9)中将分组设为"可选".它们在任何表达式或语法的许多其他部分中都是"可选的". (8认同)
  • "读者有所不同." 嗯,是的:MSDN规范**错误**意味着`return(表达式`和`返回表达式)`是合法的. (4认同)
  • M $的解释是不正确的.`()`不是return语句的一部分. (2认同)
  • @JimBalter与`return()`,`return(`和`return)`:P (2认同)

Sal*_*ali 9

绝对没有区别.如果你将看看JS(ECMAScript)规范的return语句.在许多其他事情中,它告诉你:

返回[此处没有LineTerminator]表达式;

你可以提供表达式return.表达hello,Math.abs(x),yourCustomFunc(7),或在你的第二个情况下,这可能是1(1).1评估后的表达(1)(((((1))))))真正奇怪的事情是一样的,甚至是同样的(+(!(+(!1)))).


IQA*_*eas 9

return一个语句, 一个启动return 语句的关键字,而不是一个函数.

如前所述,额外的括号会影响评估顺序,但不会用于"执行"命名的函数return.这就是为什么这些线路没有任何问题:

return (1);
var a = (1);
Run Code Online (Sandbox Code Playgroud)

实际上,它们与这些线条完全相同:

return 1;
var a = 1;
Run Code Online (Sandbox Code Playgroud)

之所以return()抛出一个语法错误是的确切原因以下行引发错误(包括在比较中return语句):

return();    // SyntaxError: syntax error
var a = ();  // SyntaxError: syntax error
Run Code Online (Sandbox Code Playgroud)


hij*_*ian 6

人类存在巨大差异,Javascript引擎零差异.

return 1是一个声明我们需要立即退出函数屈服值1的声明.

return(1)是一个伪装成愚蠢惯例的函数调用的语句,你没有义务在Javascript中插入括号外的空格.如果你在生产系统中使用这样的代码,那么任何维护人员都会花费一些时间来决定你是否确实return()在代码库中的某个地方有功能,或者只是不知道return关键字是什么.

正如许多其他人已经正确说过的那样,括号除了"group"之外什么都不做,优先级高于Number1 的文字.

  • "人类存在巨大差异" - 不称职的人."伪装成函数调用的同一语句" - 没有`return`函数."你没有义务在Javascript中用括号插入空格的愚蠢惯例" - 几乎没有语言要求; 称这种愚蠢是愚蠢的."任何维护者都会带着赌注和火炬来到你的办公室" - 没有胜任者会这样做.`return(1)`是一种糟糕的做法,但对这些事情感到不安的人却在浪费资源,营造恶劣的氛围. (3认同)
  • 因此,您要么不知道"有义务"意味着什么,要么就是在改变您的主张......无论哪种方式,我都不会浪费任何时间在您身上. (2认同)