Javascript 为什么'function(){{`在JS中是合法的?
我最近看到了表单的一些JS:Javascript 为什么'function(){{`在JS中是合法的?,javascript,syntax,Javascript,Syntax,我最近看到了表单的一些JS: function f(x) {{ return x + 1; }} 令我惊讶的是,这在语法上是合法的,而且效果很好。起初我以为这是C风格的匿名作用域,但它没有引入新的作用域: function f(x) {{ var y = x + 1; } return y;} // no error 为什么JS接受这些多余的括号?它们是如何解释的/它们是什么意思?{}只是表示一个块或“组”除非与类似于if语句的语句配对,否则它不会做任何有用的事情。var的范围由Javasc
function f(x) {{ return x + 1; }}
令我惊讶的是,这在语法上是合法的,而且效果很好。起初我以为这是C风格的匿名作用域,但它没有引入新的作用域:
function f(x) {{ var y = x + 1; } return y;} // no error
为什么JS接受这些多余的括号?它们是如何解释的/它们是什么意思?
{}
只是表示一个块或“组”除非与类似于if
语句的语句配对,否则它不会做任何有用的事情。var
的范围由Javascript中的函数决定,而不是由块决定
新的让ES6中的作用域变为块。这是对var
声明的变量作用域的误解。{…}
是一个块。JS没有块级别的作用域。因此基本上它什么也不做。使用双大括号编写它的人一定是在冒烟,因为它根本不做任何事情,即使它是有效的。所以请参见MDN:。@SergiuParaschiv:从技术上讲,当你在5月份评论JavaScript没有块级别的作用域时,你是正确的。最终的ES2015规范添加了块级范围(let
,const
,class
)直到6月才发布。尽管如此,即使在几年前,文字还是刻在墙上了…:-)