jsHint Проблема "функция не определена", порядок объявлений функций имеет значение? - PullRequest
4 голосов
/ 07 ноября 2011

Передача этого кода через 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 выдает ошибку.

Ответы [ 3 ]

4 голосов
/ 07 ноября 2011

Это ложное срабатывание в jsLint.
Оба ваших фрагмента кода работают нормально.

Игнорировать предупреждение.

2 голосов
/ 07 ноября 2011

Первый пример - проблема с подъемом, потому что a () ссылается на b () до того, как он объявлен. Решение состоит в том, чтобы иметь 'var a, b;' после вашего «использования строгого»; заявление.

0 голосов
/ 07 ноября 2011

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

В этом случае это не радует, потому что человеку может быть трудно понять - даже если это совершенно правильный Javascript.

...