我有一个数组数组(可以说是多维数组,本例中为doors
),其中wait
和point
未定义。
var wait;
var point;
var doors = [
[wait, doorWrap, 'regY', point, 10, 'bounceOut', 150, 5, 'bounceIn']
// ,[etc.]
];
我想循环doors
数组,对于每次迭代,执行key()
函数,并将doors
条目作为参数。
multiKey(doors, 500, 600);
function multiKey (keys, point, wait) {
for (var i = 0; i < keys.length; i++) {
wait *= i;
key.apply(this, keys[i]);
}
}
在将500
和600
传递到multiKey()
函数中后,我预计point
和wait
会在key()
函数运行之前定义好——但见鬼,point
和wait
原来是undefined
。
怎么了?我该如何着手解决这个问题?
也为标题感到抱歉。我希望这个问题足够清楚,因为我很难用语言表达我的问题!谢谢
multiKey()
签名中的wait
和doors
数组中的wait
是不同的值。
您可以将要传递的值分配给循环中的每个数组。
var doors = [
// --v--wait --v--point
[0, doorWrap, 'regY', 0, 10, 'bounceOut', 150, 5, 'bounceIn']
// ,[etc.]
];
multiKey(doors, 500, 600);
function multiKey (keys, point, wait) {
for (var i = 0; i < keys.length; i++) {
keys[i][0] = wait * i;
keys[i][3] = point
key.apply(this, keys[i]);
}
}
JavaScript没有指针,它的基元类型在分配时总是被复制的。因此,当wait
和point
包含在doors
阵列中时,您正在将undefiend
复制到它们中。
然后,当您将初始值传递给multiKey
函数时,它们将被分配给完全不同的wait
和point
参数。然后将wait
参数乘以i
,但这与Arrays中的值完全不同,因此仍然只是从Array传递undefined
。
point
和wait
已声明,但未定义。
我在point
上没有看到任何操作。