创建新函数并传递参数而不调用它

时间:2018-03-26 08:30:40

标签: javascript

在项目中有实现的方法,它们将异步执行函数堆栈,但问题是,它们只接受函数,这是一个例子:

self.executeFunction = function(functionStackItem) {
// Some additional check and logics
// Some logging
    functionProcessor.processFunction({
        processableItem : functionStackItem
    });
};

因此,我们有这样的方法,用于创建将同步执行的函数:

userFunction = new Function('globalVariable, logger', userCode);
userFunction(globalVariable, logger);

但是现在,当我们转向异步时我必须使用控制器提供的executeFunction方法,问题是,我不知道如何在这段代码中添加这些参数:

userFunction = new Function('globalVariable, logger', userCode);
// userFunction(globalVariable, logger); cannot use this, because this will call and execute function immediately
projectName.processingController.executeFunction(userFunction); // passing function, that will be executed as needed, but it doesn't contain parameters

正如您在上面的代码中看到的那样,函数会被传递,但是需要的参数:globalVariable和logger将是未定义的 - 我该如何修复它?有没有办法不需要重新处理processingController?

1 个答案:

答案 0 :(得分:3)

您要么使用包装函数:

projectName.processingController.executeFunction(function() {
    return userFunction(globalVariable, logger);
});

thisexecuteFunction设置为有意义的内容:

projectName.processingController.executeFunction(function() {
    return userFunction.call(this, globalVariable, logger);
});

Function#bind

projectName.processingController.executeFunction(
    userFunction.bind(null, globalVariable, logger)
);

...但不是executeFunctionthis设置为有意义的内容,因为bind设置了一个特定的this(我正在使用null上面的论点)。