假设我有这个函数,它就像一个不同版本的Array.push,并利用它中的一些不同的逻辑:
var array_values = [];
function pump_array(needle, haystack, callback) {
    var pushed = false;
    if(haystack.indexOf(needle) === -1) {
        haystack.push(needle);
        pushed = true;
    }
    if(typeof callback == 'function') {
        callback(haystack, pushed);
    }
}现在,如果我以这种方式使用它:
var pump_array_callback = function(new_data_in_array_values, pushed) {
    if(pushed) {
        console.log('added "first" into "array_values[]"');
    } else {
        console.log('"first" already in "array_values[]"');
    }
    console.log(new_data_in_array_values);
};
pump_array('first', array_values, pump_array_callback);
pump_array('first', array_values, pump_array_callback);pump_array的第一个函数调用将输出:
added "first" into "array_values[]"
而第二种情况则恰恰相反:
"first" already in "array_values[]"
所以,基本上,我的问题是:
这是在函数中调用/执行匿名函数的正确方式吗?
if(typeof callback == 'function') {
    callback(haystack, pushed);
}还有其他更务实的方法来做同样的事情吗?
发布于 2016-01-28 12:35:25
调用回调是可以的。
还有其他更务实的方法来做同样的事情吗?
对于这个用例,您不应该使用回调。只要在可能的时候使用返回值(而且您几乎不需要回调)。
function pump_array(needle, haystack) {
    if (haystack.indexOf(needle) === -1) {
        haystack.push(needle);
        return true;
    }
    return false;
}
var array_values = [];
function pump_array_result(pushed) {
    if (pushed) {
        console.log('added "first" into "array_values[]"');
    } else {
        console.log('"first" already in "array_values[]"');
    }
    console.log(array_values);
};
pump_array_result(pump_array('first', array_values));
pump_array_result(pump_array('first', array_values));https://stackoverflow.com/questions/35061091
复制相似问题