在运行函数之前定义变量值



我有一个数组数组(可以说是多维数组,本例中为doors),其中waitpoint未定义。

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]);
    }
}

在将500600传递到multiKey()函数中后,我预计pointwait会在key()函数运行之前定义好——但见鬼,pointwait原来是undefined

怎么了?我该如何着手解决这个问题?

也为标题感到抱歉。我希望这个问题足够清楚,因为我很难用语言表达我的问题!谢谢

multiKey()签名中的waitdoors数组中的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没有指针,它的基元类型在分配时总是被复制的。因此,当waitpoint包含在doors阵列中时,您正在将undefiend复制到它们中。

然后,当您将初始值传递给multiKey函数时,它们将被分配给完全不同的waitpoint参数。然后将wait参数乘以i,但这与Arrays中的值完全不同,因此仍然只是从Array传递undefined

pointwait声明,但未定义。

我在point上没有看到任何操作。

最新更新