Почему window хранит в себе переменные по значению, а не по ссылке?

  • 2 сентября 2023 г. 8:06
Ответы на вопрос 2
window хранит переменные по значению, а не по ссылке потому, что JavaScript использует копирование значения при присваивании переменной, а не создание ссылки на объект. Когда мы присваиваем значение одной переменной другой, JavaScript копирует значение из одной переменной в другую, а не создает ссылку на то же значение.

В случае с переменной `q`, когда мы передаем ее в функцию `foo.bind(window, q)`, происходит копирование значения 0 из переменной `q` в аргумент функции. Далее, при вызове этой функции, она работает с копией значения 0, а не с самой переменной `q`. Поэтому, изменение значения аргумента `value` внутри функции `foo` не влияет на значение переменной `q` в контексте `window`.

Если бы JavaScript использовал передачу переменных по ссылке, то при изменении значения аргумента `value` внутри функции `foo`, также бы изменялось и значение переменной `q` в контексте `window`.
let a = 0;
window.a // undefined

function foo(x) {
  this.x++
}

// В этой функции, локальная переменная 'x' и свойство 'x' объекта 'this' - это разные вещи.
// Если хочется иметь функцию, которая будет менять определенное или произвольное свойство объекта 'window' или произвольного объекта - то делать надо это явно и прямо.

// Например:
window.x = 0;
window.x++;

// Или же:
let propName = 'a';
window[propName] = 0;
window[propName]++;
Похожие вопросы