如何将带参数的函数传递给另一个要调用的函数?

时间:2013-07-08 02:34:17

标签: javascript function arguments iteration object-literal

具体来说,我有一个迭代对象文字的函数:

    forEachIn: function(objList, action) {
        for (var thing in objList) {
            if (objList.hasOwnProperty(thing)) {
                action(objList[thing]);
            }
        }
    },

但是在每个属性上调用的action需要另一个参数animations

    initEquipAnimation: function(equipment, animations) {
        if (typeof equipment !== 'undefined' &&
            equipment !== null) {
            if (equipment.setAnimation) {
                console.log("Setting animation for: " + equipment);
                equipment.setAnimation(animations)
            }
        }
    },

如何在不必编辑forEachIn函数的情况下传递第二个参数?或者我应该做些什么,在参数action之后传递另一个对象或数组中的可能参数或参数?

1 个答案:

答案 0 :(得分:0)

第三个论点可能是最简单的。如果你不想使用它,一种可能性是传递一个参数的函数,然后调用双参数动作方法。

forEachIn(
    objectList,
    function(equipment) { initEquipAnimations(equipment, animations); }
);

这会创建一个闭包,假设animations设置为要使用的动画。请注意,如果animations在迭代期间可能会有所不同,您可能需要创建另一个闭包以使用IIFE捕获值:

forEachIn(
    objectList,
    (function(anims) {
        return function(equipment) { initEquipAnimations(equipment, anims); }
    }(animations))
);

另一种可能性是,如果您可以灵活地将参数重新排序到initEquipAnimation,那么就是将函数绑定到前导参数,只留下由forEachIn迭代提供的设备。 / p>

initEquipAnimation : function(animations, equipment) { . . . }

forEachIn(objectList, initEquipAnimation.bind(null, animations));