在JavaScript中,评价( 10 )和10有什么区别?
如果我们在括号中添加一个匿名函数,我们就可以像这样直接计算它:
(a => 10)() // returns 10
当我们写到:
(10)
是否对括号进行了计算,然后计算了10,最后返回了10?所以( 10 )我们有2份评价,10份,我们有1份评价?
发布于 2016-03-17 16:17:31
如果您查看等级库,您将发现关于分组运算符的如下内容
ParenthesizedExpression:(表达式)
注意,该算法没有将GetValue
应用于计算表达式的结果。这样做的主要动机是,可以将delete
和typeof
等运算符应用于带括号的表达式。
所以,它真正做的就是计算括号内的表达式。但是,正如明确指出的那样,它不调用GetValue
(例如,与http://www.ecma-international.org/ecma-262/6.0/index.html#sec-assignment-operators-runtime-semantics-evaluation不同)。
换句话说,如果您处于表达式上下文中,则expression
和(expression)
是等效的。
所以( 10 )我们有2份评价,10份,我们有1份评价?
是。
发布于 2016-03-17 15:53:42
( => 10)()
定义并立即计算函数。
(10)
是一个(简单的)表达式,带有一些额外的括号。
在实践中,前者是一种非常低效率的方法,可以获得与后者相同的结果(只是稍微低效率)。
如果函数做其他的事情,差别就会开始变得重要(例如。形成闭包或具有本地定义--在简单表达式中都不可能。
发布于 2016-03-17 16:02:06
代码(a => 10)
定义了一个匿名函数。然后在后面添加()
,计算该函数。然而,您的函数所做的就是返回值10。一个示例可能是使用代码(a => a + 1)(9)
,它返回10。
另一方面,代码(10)
只是直接计算的代码(它不是函数定义)。您也可以为同样的效果编写10
或9 + 1
。
(a => 10)()
和(10)
的不同之处在于,第一种形式允许您使用作用域变量,从而用较少的代码表达更复杂的指令。
https://stackoverflow.com/questions/36065438
复制相似问题