Javascript如何通过名称传递布尔函数

时间:2015-07-05 01:55:09

标签: javascript

我想将一个和/或一个或不相等的函数作为参数传递给另一个函数。

有没有办法在不使用字符串比较的情况下使用函数调用来实现类似于下面的内容:

function(x, y, z){
    if(z == "and"){
        return x && y;
    }
    if(z == "or"){
        return x || y;
    }
} 

我想要的是:

function(x, y, func){
    func(x,y); //func can be passed as either and or or or other logical op.
} 

&&是否有简写?或||功能?类似于operator.and或operator.or的东西?

5 个答案:

答案 0 :(得分:2)

在JavaScript中,您可以将任何函数作为参数传递,因此类似这样的函数将起作用:

function cb_and(x, y) {
    return x && y;
}

function cb_or(x, y) {
    return x || y;
}

function do(x, y, cb) {
    cb(x, y);
}

答案 1 :(得分:1)

您可以在JavaScript中传递函数作为参数。在您的方案中,您可以执行以下操作:

<强>鉴于

function and(x, y) {
  return x && y;
}

function or(x, y) {
  return x || y;
}

function operate(x, y, operation) {
  return operation(x, y);
}

operate(true, false, and); // => false
operate(true, false, or); // => true

<强>用法:

function doLogic(x, y, func){
    return func(x,y); // If you want the calculation result, return it too
}

答案 2 :(得分:1)

函数是一等公民,所以你可以将它们作为参数传递。

我认为没有原生的AND和OR功能,因此您必须手动定义它们。

ES6 arrow functions允许您以非常短的方式定义它们:

var f = (x, y, func) => func(x,y);
f(foo, bar, (a,b) => a && b); // foo && bar
f(foo, bar, (a,b) => a || b); // foo || bar

答案 3 :(得分:0)

您可以尝试回调函数

if (balance < 1) {
    triggerFancybox();
}

不确定这是否是你想要的;但这是可能的。

答案 4 :(得分:0)

通常这个想法被抽象成一个&#34;谓词函数&#34;。本质上,如果你的函数需要某种基于参数(或多个参数)的布尔结果,你可以接受来自调用者的谓词函数,它可以做任何计算值所需的事情。

function myMysteriousFunction(x, y, predicate) {
    if (predicate(x, y)) {
        // Do stuff
    }
}

JavaScript没有对其运算符进行任何内置的第一类引用,但如果您需要重用,那么就没有什么能阻止您在公共位置定义它它:

var operators = {
    and: function(x, y) { return x && y; },
    or: function(x, y) { return x || y; },
    equal: function(x) { return x == y; },
    // etc.
};