function func(x = y, y = 2) {
return [x, y];
}
func(); // ReferenceError: y is not defined
func(1); // [1, 2]
Как видно из приведенного выше кода, в области параметров функции есть скрытая TDZ, которая объясняет, почему сбой кода ниже:
function func(arg) {
let arg = 1; // SyntaxError: Identifier 'arg' has already been declared
}
Поэтому параметры функции должны быть объявлены с помощью let
, но меня смущает:
function func(arg) {
var arg = 1;
console.log(arg); // 1
}
этот код отлично работает.
Почему вы можете обновлять переменные с помощью var
? Как Javascript объявляет параметры функции?
изменить:
Я точно знаю, что вы не можете использовать let to redeclare variable. Вопрос здесь заключается в том, объявлены ли параметры функции с помощью let
, поэтому:
function func(arg) {
var arg = 1;
}
выглядит следующим образом:
let arg; // arg parameter declares here
var arg = 1; // func body
и почему это может выполняться без каких-либо исключений?