首页 > 解决方案 > 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

如何根据需要运行上述代码?

标签: javascript

解决方案


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为局部变量,请检查上面的代码片段


推荐阅读