Небезопасные ссылки Javascript на переменную

#javascript

#javascript

Вопрос:

Приведенный ниже код работает не так, как я хочу. Я думаю, что проблема, вероятно, связана с небезопасной ссылкой.

 var values = { "key1": "val1", "key2": "val2" };

const properties = {};
for (key in values) {
  properties[key] = {
    get: () => values[key],
    set: (val) => {
      values[key] = val
    }
  };

}
console.log(properties["key1"].get()); // Result should be val1 but it prints val2  

Как я могу запустить приведенный выше код, как я хочу?

Комментарии:

1. key в настоящее время является глобальным, поэтому при get: () => values[key] выполнении key всегда будет последним ключом от объекта… попробуйте for ( let key in values )

2. 1. Не используйте неявные глобальные переменные. 2. Рассмотрите возможность использования линтера, такого как ESLint, который избавит вас от распространенных ошибок, подобных этой.

Ответ №1:

 var values = { "key1": "val1", "key2": "val2" };

const properties = {};
for (const key in values) {
  properties[key] = {
    get: () => values[key],
    set: (val) => {
      values[key] = val
    }
  };

}
console.log(properties["key1"].get());  

согласно Jaromanda X, описанному в комментарии, переменная key инициируется как глобальная переменная, а глобальная переменная содержит последнюю запись объекта, поэтому попробуйте сделать key ее переменной цикла for, поэтому для каждой итерации цикла for она содержит значение key как локальная переменная, пожалуйстапроверьте приведенный выше фрагмент