Есть два примера:
function trololo(param) {
console.log(variable);
var variable = 5;
console.log(variable);
}
trololo(10);
Выведет
undefined, затем
5.
function trololo(param) {
console.log(param);
var param = 5;
console.log(param);
}
trololo(10);
Выведет
10, затем
5.
Вопрос. Что в этих двух примерах на самом деле происходит?
Понятно, что интерпретатор JS сначала объявляет все переменные и функции, а уже на втором заходе присваивает переменным значения и исполняет код. Поэтому в первом примере на момент первого
console.log переменная
variable уже существовала, но её значение было
undefined.
Но что происходит во втором примере?
У меня есть два предположения:
- Объявление переменной при помощи ключевого слова
var опускается, т.к. интерпретатор видит параметр с таким же именем. Поэтому значение 5 присваивается параметру, перезаписывая значение 10. В обоих console.log выводится значение ПАРАМЕТРА, а не ПЕРЕМЕННОЙ.
- Переменная всё-таки объявляется, перезаписывая параметр. Первый
console.log выводит ПАРАМЕТР, а второй уже ПЕРЕМЕННУЮ.
Где правда?