【问题标题】:Javascript function programming — receiving elaborate parametersJavascript函数编程——接收详细参数
【发布时间】:2011-02-01 18:04:53
【问题描述】:

我正在编写一个 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 === 1animation 是一个数组,其中一个对象作为它的第一个子元素,数字 3000 作为它的第二个子元素。

Firebug 告诉我 animation 计算为数字 3000。我做错了什么?

【问题讨论】:

    标签: javascript arrays function parameter-passing


    【解决方案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 中没有“元组”类型。)

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

    【讨论】:

    • 谢谢 Bob,只需要一个数组语法复习 :)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      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) 也是如此。只有最后一个值很重要,其他值只是忽略(但无论如何都会运行,所以会有任何副作用)。

      【讨论】:

        猜你喜欢
        • 2014-12-28
        • 2020-08-14
        • 2018-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-12
        • 1970-01-01
        相关资源
        最近更新 更多