1

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

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

我的问题是为什么?

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

4

1 回答 1

1

您将变量视为容纳对象的盒子。当你这样做时,比如说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,依此类推。

于 2013-03-03T21:17:05.077 回答