Передача этого кода через jsHint:
var A = function (spec) {
"use strict";
var a = function () {
return b();
};
var b = function () {
return 5;
};
a();
};
возвращает эту ошибку:
Line 4: return b();
'b' is not defined.
Я понимаю, что это может быть связано с "подъемом", как описано здесь: Порядок функций JavaScript: почему это важно?
Однако следующий код возвращает ту же ошибку:
var A = function (spec) {
"use strict";
function a () {
return b();
}
function b () {
return 5;
}
a();
};
Если я правильно понимаю, по крайней мере второй фрагмент кода не должен возвращать ошибку. Я ошибаюсь?
Даже учитывая механизм подъема, я все еще не понимаю, почему первый фрагмент кода должен быть неправильным. Функция a
вызывается только после определения функции b
, поэтому b
будет в закрытии a
. Мой код неверен или jsHint неверен?
Я понимаю, что этот вопрос чисто академический, потому что код работает так, как ожидается во всех браузерах. Тем не менее, я хотел бы знать, почему jsHint выдает ошибку.