Функции самовозврата, Resharper 6.1 и JS Lint - можно ли использовать в обоих случаях?

Скажем, у меня есть немного JavaScript, который выглядит так:

MyCompany.MyProduct = {};

(function () {

    "use strict";

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

который я считаю правильным подходом...

Он пропускает Javascript от мистера Крокфорда, так что я решил, что у меня все хорошо, но потом заметил, что Resharper (6.1 работает в Visual Studio 2010) сказал мне

Неожиданное выражение

в последней строке (т.е. этот бит: }());).

Теперь я знаю, что там есть спорная скобка, и многие предпочитают форму })(); но это не умиротворяет Resharper, и это раздражает JS Lint, поэтому я позволил этому упасть.

Тогда я пошел за:

MyCompany.MyProduct = {};

!function () {

    "use strict";

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

что я думаю, что эквивалентно (в любом случае, согласно этому), и Решарпер казался счастливым, но теперь Дж.С. Линт сходит с ума, говоря мне:

Оберните немедленный вызов функции в скобках, чтобы помочь читателю понять, что выражение является результатом функции, а не самой функции.

Поэтому, прежде чем я просто выберу один стиль (вероятно, тот, который раздражает обе ссорящиеся стороны, потому что, если они не могут играть вместе...), мне было интересно, так как у Javascript есть так много аккуратных синтаксических переулков, если вы знаете, где зажечь факел:

Есть ли какой-то синтаксис, который я могу использовать, чтобы обе стороны были довольны?

1 ответ

Вы не можете удовлетворить две противоположности одновременно. Но есть обходные пути...

JSLint требует, чтобы вы переместили вызов в парены, содержащие функцию. В качестве альтернативы JSLint вы можете попробовать JSHint или ESLint с похожими, но более гибкими правилами. ESLint, в частности, позволяет вам установить опцию wrap-iife "внутри" или "снаружи". Вот пример.

Или вы можете попытаться изменить правила, используемые Resharper. Я не знаю, какие варианты дает вам Резарпер, поскольку я этим не пользовался, но, возможно, стоит поискать.

Другие вопросы по тегам