gpt4 book ai didi

javascript - 将全局对象保存到全局数组,更改对象中的值并再次保存

转载 作者:行者123 更新时间:2023-11-28 02:24:21 24 4
gpt4 key购买 nike

尝试通过使用键和值将时间和按键数据写入全局对象并将该对象推送到全局数组来捕获 keyup 和 keydown 之间以及 keyup 和 keydown 之间的下一次击键的时间。全局变量的原因是我不知道如何在绑定(bind)到 keydown、keypress 和 keyup 事件的函数之间传递参数。每个事件驱动函数都有我想要作为键值对(例如键代码和键入的字符)保存在一个对象中的数据。每个对象代表一次击键,但也包含或使用前一次击键的一些信息进行计算。

到最后,全局数组的每个元素中的数据似乎要么是未定义的,要么是最后输入的数据。

我的问题是为什么?

我通过消除全局对象(键值)并将其替换为随每次击键而变化的全局变量来解决这个问题。然后,我能够在函数(函数作用域)中创建一个对象,并使用每个新字符将该对象推送到全局数组中。似乎有效。本能地感觉应该是相反的。我只是想了解为什么它会这样工作。我已经读完了 Zakas 的这本书的三分之一,还有很多东西需要学习。

最佳答案

您将变量视为容纳对象的盒子。当你这样做时,说a = b,那么b中的任何内容都会被复制到a。 JavaScript 不是这样工作的。

相反,JavaScript 的工作原理是在某处拥有一个对象,并且变量指向该对象。然后,当您执行 a = b 时,a 现在指向与 b 相同的对象;当 b 的属性被修改时,a 的相同属性也会被修改,因为它们指向的对象是相同的。

如果您希望a = b 制作副本,则必须明确执行此操作。例如,如果您有属性 foobar,您可以这样做:

a = {
foo: b.foo,
bar: b.bar
};

不过,这只会向下复制一层,因此如果 b.foo 也是一个对象,那么 a.foo 将引用与 相同的对象>b.foo,同样,修改 a.foo 的任何属性都会使相同的更改出现在 b.foo 上,依此类推。

关于javascript - 将全局对象保存到全局数组,更改对象中的值并再次保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15190946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com