Переменная name в javascript. Что в ней особенного?
Ответы (2 шт):
Автор решения: Pavel Grishaev
→ Ссылка
Потому что у window уже есть строковое свойство name, и вы его задаёте.
Без функции, а просто в "начале скрипта", такие переменные - это ключи объекта window.
Если то же самое делать внутри какой-то функции, то будет работать как и ожидается.
Автор решения: Qwertiy
→ Ссылка
Потому что существует глобальное свойство name, которое не только имеет строковый тип, но ещё и сохраняется между перезагрузками окна. Объявление var name в глобальной области игнорируется поскольку такое свойство уже есть.
Если хочется иметь глобальную переменную name, не являющуюся свойством окна, то можно объявить её через let:
let name = 42
console.log(name + 1)
Если хочется воспроизвести проблему с name более явным способом, можно использовать такой код:
~function () {
with ({
_x: "",
get x() { return this._x },
set x(x) { this._x = "" + x },
[Symbol.unscopables]: { _x: true },
}) {
var x = 10, y = 10
console.log(x+1, y+1) // 101 11
}
}()
