2013-01-02 58 views
2

我一直在寻找一些精缩JavaScript代码(从GitHub),代码有一个看起来像块JavaScript变量声明

h = function(a, b, c, d) { 
     var e, h, i, j, k, l, m = this; 
     return i = $("#js-frame-loading-template").clone().show(), l = c === "back" ? 350 : 500, j = i.find(".js-frame-loading-spinner").hide() // more stuff here 

我很好奇,为什么/因为这是如何代码工作是返回语句后的变量声明

+5

阅读更多关于逗号运算符的信息:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Comma_Operator。简而言之:'return'语句右边的所有内容都是一个表达式,并返回最后一个“子表达式”的值。该行没有变量声明btw,只有赋值。 –

+0

@FelixKling谢谢澄清。你可以添加一个答案,这样它可以upvoted /接受? –

+1

我希望能找到一个重复的(我敢肯定它存在),但是......) –

回答

6

Let me introduce you to the comma operator

一切向return语句的右边是一个表达,由多个的“子表达式”,由逗号分隔:

return a, b, c, d; 

每个子表达式,从左至右,并且最后一个的值是整个表达式的结果。即在这种情况下返回最后一个表达式的结果(在您的示例中,评估d// more stuff here的任何隐藏结果)。

将多个表达式合并为一个“诀窍”。


鸡蛋里挑骨头:

[...]因为有变量声明return语句后

没有可变声明在该行,只有赋值表达式。因为逗号运算符(和return语句)只能用于表达式而不是语句,所以不能在那里存在var语句(变量声明)。