Как можно поднять variable, заявленный в состоянии if, а не function?
Пример 1:
var x = 1;
if (a = 1) {
x += typeof a;
}
x; // 1number
a; // 1
При попытке сделать то же самое с function в SpiderMonkey и V8 подъема не произошло. Почему бы нет? Что происходит с функцией в состоянии if?
Пример 2:
var x = 1;
if ( function f () { return 9; } ) {
x += typeof f;
}
x; // 1undefined
f; // ReferenceError: f is not defined
Однако, когда функция определена внутри if при успехе, функция поднимается
Пример 3:
var x = 1;
if ( true ) {
x += typeof f;
function f() { return 1; }
}
x; // 1function
f; // f()
typeof f; // function
Даже если условие ложно, функция поднимается Пример 4:
var x = 1;
if ( false ) {
x += typeof f;
function f() { return 1; }
}
x; // 1
f; // undefined not ReferenceError: f is not defined
// f still got hoisted
Что происходит в примере 2? Почему функция не поднимается, когда в примере 1 выполнялась переменная?
(Я попал в ловушку выражения if ( function f () { return 9; } ) ....) ха-ха
@RoyiNamir - Нахождение справа от задания - не единственное, что переводит парсер JS в режим выражения. Между ( и ) тоже.
Да ..... ^ ..... Я это пропустил :)
@ Квентин, как это относится к моей проблеме. Я знаю, что когда мы назначаем функцию какой-то переменной, она не поднимается. Я не придаю значения. Моя функция f - это function declaration, и ни один из них не является function expressions
@Quentin, даже если это не function expressions, я использую его после, а не раньше. и должен быть доступен внутри if как var f = function () {}; typeof f; // function. Почему этого не произошло?
@NAVIN - if ( function f () { return 9; } ) - Это функциональное выражение.
@NAVIN - Вы нигде не назначаете возвращаемое значение выражения функции, поэтому f не определен.
a = 1 не является декларацией, он не поднимается. Это задание работает только в строгом режиме. Добавьте "use strict"; ко всем вашим сниппетам, запустите их снова, и вы получите гораздо менее удивительные результаты.
@Quentin Спасибо, понял



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Функциональные выражения не поднимаются.