#javascript #jshint
#javascript #jshint
Вопрос:
Я пытался использовать JSHint в своем проекте. Но для меня это явно не работает. Например:
(function () {
if (!window.myApp) window.myApp = {};
var myApp = window.myApp;
var a = function (key) {
key = key || "key";
return myApp.someModule.get(key);
};
a();
})();
Этот фрагмент должен выдавать ошибку, что-то вроде этого: «Ошибка типа: MyApp.SomeModule не определена», но JSHint по-прежнему молчит. Я использую настройки по умолчанию для JSHint изhttp://jshint.com / . Кто-нибудь может мне помочь? Большое спасибо.
Комментарии:
1. Возможно, вы не установили
undef
параметр? Взгляните на документацию: jshint.com/options
Ответ №1:
Достаточно уверен, что он проверяет только переменные в «локальной» области видимости, он не будет проверять все цепочки объектов. На самом деле я бы сказал, что это невозможно обнаружить во всех случаях.
Рассмотрим:
var o = {};
someAjaxRequest({
callback: function(response) {
o[response.responseText] = 'found!';
}
});
Комментарии:
1. Это так странно, не так ли? 🙂 Но, по-видимому, это причина. Спасибо!
2. На самом деле, было бы практически невозможно полностью разобраться в этом без фактического запуска кода. Я обновлю свой пост примером.
3. Я думаю, JSHint должен обнаруживать ситуацию, когда метод некоторого объекта не определен. В вашем примере, если я добавлю строку
var a = o["h"].method();
, она все еще не обнаружена. Но я могу ошибаться.4. Конечно, но дело в том, что ее действительно трудно поймать во всех сценариях, особенно при динамическом назначении свойств и способе работы свойств объекта, поэтому кажется, что она не пытается.