2

次のようなJavaScriptが少しあるとします。

MyCompany.MyProduct = {};

(function () {

    "use strict";

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

これは、採用するのに問題のないアプローチだと思います...

それはCrockford氏のJavascriptリントを通過するので、私は良いことをしていると思いましたが、Resharper(Visual Studio 2010で実行されている6.1)が私に言ったことに気づきました

意外な表現

最後の行(つまり、このビット:) }());

今、私はそこに物議を醸すブラケットの配置があり、多くの人がフォームを好むことを知っていますが、それはResharper})();をなだめず、 JS Lintを悩ませるので、私はそれを落とします。

それから私は行きました:

MyCompany.MyProduct = {};

!function () {

    "use strict";

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

これは(とにかくこれによると)同等だと思います。Resharperは幸せそうに見えましたが、今ではJS Lintがおかしくなり、次のように言っています。

式が関数自体ではなく関数の結果であることを読者が理解できるように、関数の即時呼び出しを括弧で囲みます。

だから、私が1つのスタイルを選択する前に(おそらく、両方の争いの当事者が一緒にプレイできないために迷惑になるものです...)Javascriptには、トーチを照らす場所を知っていれば、非常に多くのきちんとした構文上の路地があるので、疑問に思いました:

両方の当事者を幸せに保つために使用できる構文はありますか?

4

1 に答える 1

0

一度に 2 つの相反するものを満たすことはできません。しかし、回避策はあります...

JSLintでは、関数を含む括弧に呼び出しを移動する必要があります。JSLint の代わりに、類似しているがより柔軟なルールでJSHintまたはESLintを試すことができます。特に ESLint では、オプションwrap-iifeを「inside」または「outside」に設定できます。ここに例があります。

または、Resharper が使用するルールを変更してみてください。Resharper を使用したことがないので、Resharper がどのようなオプションを提供するかはわかりませんが、調べてみる価値はあるかもしれません。

于 2015-01-30T06:25:10.753 に答える