Вам следует избегать использования условно созданных функций.
Например, предположим следующий код:
if (false){
function foo(){
console.log(1)
}
}
foo()
Firefox не поднимет функцию, и это приведет к ошибке ReferenceError: foo is not defined
. Тем не менее, Chrome поднимает функцию и печатает 1
. Итак, очевидно, что вы имеете дело с другим поведением браузера. Поэтому вообще не делайте подобных вещей (или используйте функциональные выражения, если очень хотите).
См. также https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function
Функции могут быть объявлены условно, то есть оператор функции может быть вложен в оператор if. Большинство браузеров, кроме Mozilla, будут рассматривать такие условные объявления как безусловное объявление и создавать функцию независимо от того, истинно условие или нет, см. эту статью для обзора. Поэтому их не следует использовать, для условного создания используйте функциональные выражения.
Особенно посмотрите на связанную статью, которая несколько объясняет проблему, которую вы видите. Так что Chrome, похоже, что-то изменил в этом отношении. Но опять же, не используйте условно созданные функции.
И обратите внимание, что, как прокомментировал FREEZE, вы должны использовать 'use strict';
, который не разрешит такой код, а вместо этого выдаст исключение.
person
str
schedule
18.11.2016
foo()
? Конечно, правда всегда верна... - person Jazcash   schedule 18.11.2016else
не выполняется, не означает, что определение функции не обрабатывается. - person krillgar   schedule 18.11.2016'use strict';
передif (true)
, то когда доходит доfoo()
вылетает ошибка мол"foo is not defined"
. - person krillgar   schedule 18.11.2016