Есть два примера:
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
выводит ПАРАМЕТР, а второй уже ПЕРЕМЕННУЮ.
Где правда?