在对象方法调用上使用两组括号的原因是什么

时间:2019-01-28 15:08:13

标签: javascript css html5

我目前正在学习和学习JavaScript,我刚刚找到了一个使用此'()();'的简单代码。这叫什么,没有找到太多有关它的信息,它是什么以及如何使用,这是我发现的代码:

    $collection->aggregate(
        [
            {
                '$project' => 
                    {
                        'alteredExecutionTime' => 
                            {
                                '$subtract' => ['$executiontime', 5 * 60 * 1000]
                            }
                    }
            }
        ]
    );

如果有些错误,英语不是我的母语。

3 个答案:

答案 0 :(得分:3)

括号本身是分组运算符。他们将表达式分组以控制评估的顺序或优先级。您可以read MDN here来做。

// example                 // is the same as            

(obj.go)();                 obj.go();

(method = obj.go)();        method = obj.go; method();

(obj.go || obj.stop)();     // calling go or stop after assinging to a temp variable

答案 1 :(得分:1)

该段代码演示了如何在函数执行内容(在本例中为this)中绑定go。它表明仅在方法周围加上括号不会改变该行为:this仍然绑定到obj

只要括号括起涉及运算符的表达式,情况就会发生变化,并且从表达式中得到 results 的方法将被调用,而没有特定的{{1 }}绑定:默认设置(this)。

另一种变体如下:

undefined

这里是逗号运算符的开始,所以我们处于表达式的情况:(0,obj.go)(); 在方法调用中不再绑定到this

答案 2 :(得分:0)

它仅控制执行的顺序。您也可以这样编写所有内容,以使其更加清晰:

// (obj.go)();
obj.go();

// (method = obj.go)();
method = obj.go;
method();

// (obj.go || obj.stop)();
var method = obj.go || obj.stop;
method();