代码之家  ›  专栏  ›  技术社区  ›  bugmagnet

为什么javascript坚持对函数使用大括号,而不是对其他函数使用大括号?

  •  2
  • bugmagnet  · 技术社区  · 6 年前

    例如,在javascript中,

    var a = 1;
    while (a < 10) a++;
    
    if (a === 10) a = 1;
    

    奇怪的是(对我来说) function 不一样。我愿意

    function bar(a) { return a + 1; }
    

    function foo(a) return bar(a);
    

    有什么不同 它不能表现得像 if while 等?

    2 回复  |  直到 6 年前
        1
  •  4
  •   nem035    6 年前

    消除单行语句/表达式的大括号是许多语言中的常见模式。

    这只是(懒惰的)程序员的语法糖。

    if while ,您仍然需要编写 {} 在他们周围。

    {} 有时会导致不明显的错误:

    let i = 0;
    if (i > 0)
      i++;
      console.log('this still happens');

    您的功能:

    function bar(a) { return a + 1; }
    

    {} 因为它只有一个表达式:

    const bar = a => a + 1;
    

    但是省略 对于多个操作,这又是一个错误:

    let x = x => x + 1; console.log('this still happens');

    , 运算符到链表达式:

    let i = 0;
    if (i > 0)
      i++, // <-- notice the comma
      console.log('now this does not happen');

    底线是,使用 {} 在大多数情况下,默认情况下是一个不错的选择。

        2
  •  1
  •   qht    6 年前

    这都是关于语法的。

    在scheme中,函数可能如下所示:

    (define (square x)
        (* x x))
    

    在python中,函数可能如下所示:

    def square(x):
        return x * x
    

    所以,JavaScript函数声明语句是:

    function name_this_is_function_header(...parameters) {
        // and this is function body
        // statements
    }
    

    函数是一个标记,()是一对标记,{}也是一对标记,编译器或解释器将它们视为一个称为JavaScript函数的整体抽象。

    JavaScript从Java中借用了很多语法,Java对C++做了同样的事情,C++对C做了同样的事情…,这就是原因。

    For语句,例如if和while,它的语法是:

    if (condition) one-statement;
    while (condition) one-statement;
    

    所以,这都是关于语句的,语句可以是单的,也可以是复合的。

    单个语句不需要{},复合语句只是{}标记或符号包含的几个单个语句。如果在true之后需要多个语句,则必须将复合语句作为一个整体使用。