Javascript函数编程 - 接收精细的参数

时间:2010-03-28 14:04:04

标签: javascript arrays function parameter-passing

我正在编写一个Javascript函数,它可以操作即时编写的数组并作为参数发送。

该函数编写如下:

function returnJourney(animation,clean){
    var properties = {};
    // loads of other inane stuff
    for(i in animation[0]) properties[animation[0][i]] = animation[0].i;
    // heaps more inane stuff
}

有问题的动画是jQuery动画的一组参数。通常它采用({key:value,key:value},speedAsInteger,modifierAsString)

的格式

因此,为了启动初始调试,我将其称为:

returnJouney(({'foo':'bar'},3000),1);

直接蝙蝠的事情已经过时了。据我所知,这将有returnJourney确认clean === 1,而animation是一个数组,其中一个对象作为其第一个子项,数字3000作为其第二个。

Firebug告诉我animation评估数字为3000.我做错了什么?

3 个答案:

答案 0 :(得分:1)

properties[animation[0][i]] = animation[0].i;

应该是

properties[animation[0][i]] = animation[0][i];

.i是字面上称为'i'的属性。由于(可能)不存在,您将为每个属性分配undefined

returnJouney(({'foo':'bar'},3000),1);

也没什么意义 - 你的意思是数组?:

returnJourney([{'foo':'bar'},3000],1);

(JavaScript中没有'tuple'类型。)

另外,使用var i in而不是(拼写错误)in in。忘记var会给你一个意外的全局,可能会产生令人讨厌的副作用。

答案 1 :(得分:1)

JavaScript中没有元组类型。您所拥有的只是对象{}或数组[]。他们俩都可以理解任何类型的混合物。因此,您可以将动画参数作为数组([{'foo':'bar'},3000])传递,这看起来就像您想要的那样。 或者,正如通常在JavaScript中完成的那样,使用对象:

returnJourney({props: {foo: "bar"}, speed: 3000}, 1);

function returnJourney(animation, clean) {
     var props = animation.props;
     var speed = animation.speed;
}

请注意,对象表示法允许您忽略您不想传递的内容,并清楚地表明什么值意味着什么。

至于为什么你的animation解析为3000,这很简单,这就是,运算符的工作原理。它返回大括号中的最后一个东西。因此,(10, 20, 30)将评估为30(f(1000), "hello", 30)也将评估为{{1}}。只有最后一个值很重要,其他人只是被忽略(但无论如何都要运行,所以任何副作用都会存在)。

答案 2 :(得分:0)

它使用逗号运算符将({'foo':'bar'},3000)视为表达式,该运算符返回右操作数作为结果。也许你的意思是[{'foo':'bar'},3000]