Функции самовозврата, 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. Я не знаю, какие варианты дает вам Резарпер, поскольку я этим не пользовался, но, возможно, стоит поискать.