2

假设我有一些看起来像这样的 JavaScript:

MyCompany.MyProduct = {};

(function () {

    "use strict";

    MyCompany.MyProduct.doSomethingAmazing = function () {
    };
}());

我认为这是一种可以采取的方法......

它通过了Crockford 先生的Javascript lint,所以我认为这是一件好事,但后来我注意到Resharper(在 Visual Studio 2010 中运行的 6.1)告诉我

意外的表达

在最后一行(即这一位:)}());

现在,我知道那里有一个有争议的支架放置,许多人更喜欢这种形式})();,但这并不能安抚Resharper,它也让JS Lint很恼火,所以我放弃了。

然后我去了:

MyCompany.MyProduct = {};

!function () {

    "use strict";

    MyCompany.MyProduct.doSomethingAmazing = function () {
    };
}();

我认为这是等效的(无论如何,根据这个),Resharper 似乎很高兴,但现在 JS Lint 吓坏了,告诉我:

将立即函数调用用括号括起来,以帮助读者理解表达式是函数的结果,而不是函数本身。

所以,在我只选择一种风格之前(可能是那种让争吵双方都烦恼的风格,因为如果他们不能一起玩......)我想知道,因为如果你知道在哪里点燃火炬的话,Javascript 有这么多整洁的语法小巷:

有什么可以让双方都满意的语法吗?

4

1 回答 1

0

你不能同时满足两个对立面。但是有一些解决方法...

JSLint要求您将调用移动到包含函数的括号中。作为 JSLint 的替代方案,您可以尝试使用类似但更灵活的规则的JSHintESLint 。ESLint 特别允许您将选项wrap-iife设置为“内部”或“外部”。这是一个例子

或者,您可以尝试更改 Resharper 使用的规则。我不知道 Resharper 为您提供了哪些选项,因为我没有使用过它,但它可能值得一看。

于 2015-01-30T06:25:10.753 回答