为什么javascript坚持一个函数使用大括号,而不是其他任何东西?

为什么javascript坚持一个函数使用大括号,而不是其他任何东西?,javascript,syntax,Javascript,Syntax,例如,在javascript中,我可以 var a = 1; while (a < 10) a++; if (a === 10) a = 1; 但是不行 function foo(a) return bar(a); 函数有什么不同之处,它不能像if和while等那样工作?消除单行语句/表达式的大括号是许多语言中的常见模式 这只是(lazy:)程序员的语法糖 如果在If或while中有多个语句,则仍需围绕它们编写{} 我个人建议总是这样做,因为忘记{}有时会导致不明显的错误: 设i=

例如,在javascript中,我可以

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

if (a === 10) a = 1;
但是不行

function foo(a) return bar(a);

函数
有什么不同之处,它不能像
if
while
等那样工作?

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

这只是(lazy:)程序员的语法糖

如果在
If
while
中有多个语句,则仍需围绕它们编写
{}

我个人建议总是这样做,因为忘记
{}
有时会导致不明显的错误:

设i=0;
如果(i>0)
i++;
log(“这种情况仍然发生”)都是关于语法的

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

(define (square x)
    (* x x))
def square(x):
    return x * x
在python中,函数可能如下所示:

(define (square x)
    (* x x))
def square(x):
    return x * x
所以,JavaScript函数声明语句是:

function name_this_is_function_header(...parameters) {
    // and this is function body
    // statements
}
它必须包含一个符号为{}的主体。(尽管ES6为arrow函数(()=>{})添加了一个语法,但如果其中只有一条语句,则可以省略{})

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

从java中借用了很多语法,java也做了C++的C++,C++做了同样的事情。这就是为什么

对于语句,例如if和while,其语法为:

if (condition) one-statement;
while (condition) one-statement;
所以,这都是关于语句的,语句可以是单个的,也可以是复合的

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


这不是什么神秘的事情,只是如何编写它来表示。

使用es6,可以为函数执行var a=()=>console.log('1')。不需要大括号函数具有函数级作用域,但不存在块级作用域。当然,它会随着let
而改变,但不能这样做,实际上,如果您使用箭头函数,您可以这样做<代码>常数条=a=>a+1
常数条=a=>bar(a)
啊。。。我仍然被困在ES3的世界里。这就解释了。至于“为什么”,语法规则就是这样。