为什么在JavaScript声明和初始化之间使用逗号?

时间:2018-01-11 18:04:29

标签: javascript

使用逗号分隔代码而不是移动到下一行的目的是什么?

例如,我找到了这段代码:

var fm = $.NSFileManager.defaultManager,
oURL = $.NSURL.fileURLWithPathIsDirectory(strPath, true),
lstFiles = ObjC.unwrap(
    fm.contentsOfDirectoryAtURLIncludingPropertiesForKeysOptionsError(
        oURL, [], 1 << 2, null
    )
),
lstHarvest = [];

我经常看不到它,但感觉就像是在判刑。

更新:
我想我知道发生了什么,但我很少见到这一点。是ES5,ES6的事吗?

4 个答案:

答案 0 :(得分:4)

这是var的语法:

  

var varname1 [= value1] [,varname2 [= value2] ... [,varnameN [= valueN]]];

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

请注意,初始化(=)的存在无关紧要。

为什么要使用这种语法?

  • 以避免重复var。比较:

    var a, b, c, d, e
    

    var a,
        b,
        c,
        d,
        e
    

     var a
     var b
     var c
     var d 
     var e
    
  • 有时是风格和偏好的问题

  • 在某些地方你必须使用这种语法来声明几个变量,因为你不能使用多行,(例如在for循环标题中:for (var a = 0, b = 3; ... ; ...)

请注意,与新行相同! (首先不是var变量声明的其他行,请参阅What is the purpose of the var keyword and when to use it (or omit it)?了解差异。)

但是,您的示例在末尾var之间没有逗号的情况相同。

  

是ES5,ES6吗?

这是ECMAScript第1版(1997年)以来的语法

https://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%201st%20edition,%20June%201997.pdf

(pdf文件第63/110页,第12.2节,变量陈述)

答案 1 :(得分:2)

只有一个var用于初始化多个变量。你也可以这样做(我认为这更好,更可读):

var fm = $.NSFileManager.defaultManager;
var oURL = $.NSURL.fileURLWithPathIsDirectory(strPath, true);
var lstFiles = ObjC.unwrap(
    fm.contentsOfDirectoryAtURLIncludingPropertiesForKeysOptionsError(
    oURL, [], 1 << 2, null));
var lstHarvest = [];

答案 2 :(得分:2)

像大多数其他语言一样,如c,c ++ 我们可以宣布

public function addComment(Request $request, $id)
{
   $film = Film::find($id);
   $film->comments()->save(['body'=>$request->body]);

}
像这样的javascript也允许我们这样做。简单:)

答案 3 :(得分:1)

使用逗号允许程序员在每个声明/定义的开头省略fmap id (x :: f a) = x (fmap g . fmap h) = fmap (g . h) 。您可以根据自己喜欢的风格来决定使用哪种形式,但要保持一致。