Кросс-браузерный выпуск функций Javascript - PullRequest
1 голос
/ 17 ноября 2011

Следующий javascript работает в Chrome и IE, но выдает ошибки в Firefox, потому что bar не определена при назначении для callBar.

Так кто же правильно понял их правила прицела?

function foo() {

    var callBar = bar;

    if (1 === 1) {
       callBar();
       function bar() {
          alert('yo');
       }
    }
}

foo();

1 Ответ

5 голосов
/ 17 ноября 2011

Не уверен, кто понял «правильно» в соответствии со спецификацией ECMA, но это не имеет большого значения, так как вы не можете сделать это во всех браузерах и должны изменить свой код:)

Простойобъяснение состоит в том, что function s в if операторах технически не разрешены, и браузеры делают странные вещи с ними.Некоторые браузеры рассматривают это как выражение, другие как объявление.Очевидно, FF рассматривает его как выражение, означающее, что он не существует, пока код не достигнет этой точки.Подробная информация доступна на http://kangax.github.com/nfe/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...