繁体   English   中英

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

[英]How do I pass a function with arguments to another function to be called?

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

    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之后,在另一个对象或数组中传递可能的参数或参数?

第三个参数可能是最简单的。 如果您不想使用它,则一种可能是传递一个参数的函数,然后调用两个参数的操作方法。

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

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

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

另一个可能性是,如果您可以灵活地将参数重新排序到initEquipAnimation ,则可以将函数绑定到前导参数,仅保留要由forEachIn迭代提供的设备。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM