javascript - 在 javascript 中, ( ... ) 究竟做了什么

标签 javascript function invocation

<分区>

Possible Duplicate:
What do parentheses surrounding a JavaScript object/function/class declaration mean?

最近和同事讨论哪个最好

(function(){...}())

(function(){...})()

我想知道 ( ... ) 实际上在基本层面做了什么,以及 js 引擎在上述两种情况下所做的有什么区别。理论上一种方法(即使只有很少量)比另一种方法快吗?如果我的函数返回一个对象,( .. ) 对第一个示例中的对象做了什么?

谁能解释一下。

*edit 我在互联网上得到的最接近的解释是 http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/#question-about-surrounding-parentheses ,但在我看来,这还不足以解释为什么上面的第一个示例完全有效。

最佳答案

您甚至根本不需要括号。这些圆括号的整个想法是强制函数成为 expression 而不是声明。您也可以像这样实现

!function() {
}();

感叹号也可以是+- 以及其他一些字符。因此,无论您是否使用“dog balls”版本(您的后一个)都没有区别。从性能方面来说,我不能保证,但我 99.9% 确定差异为零(最多可能是引擎相关的变化)。

因此,如果我们假设这两者之间没有性能差异,那么您使用哪一个完全取决于个人偏好。 Crock 多次将第二个版本声明为“dog balls”,因为您不再包裹整个表达式。我同意这一点。如前所述,该模式确实只是强制一个函数表达式,它应该封装整个事物以提高可读性。

关于javascript - 在 javascript 中, ( ... ) 究竟做了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9130735/

相关文章:

javascript - 为不同的浏览器窗口大小选择不同的CSS样式表?

JavaScript 函数回调

mysql - 执行咨询时出错 (1242) : Subquery returns more than 1 row

Javascript 数组在循环中动态构建

javascript - 具有可观察数组的 knockout 计算列不更新 UI

javascript - 如何使用 vuetify 减少 vue js 构建大小?

c++ - 从第二次调用开始执行函数中的一段代码

java - 哪些环境变量会影响 'java' 二进制文件?

javascript - 如何在javascript中告诉包含对象?