使用javascript .call()将参数传递给匿名函数

时间:2015-07-22 23:59:24

标签: javascript asynchronous

我正在创建一个基本队列方法,一旦回调完成就迭代一系列函数。这工作正常,但我无法传递任何参数,这是我想要做的简化版本:

var queue = {};
queue.type1 = [];

queue.type1.push(function(obj) { console.log('queued function called after callback', obj); });

var renderQueue = function(type, obj) {
    switch(type) {
        case 'type1':

            for(var i=0; i<queue[type].length; i++) {
             queue[type][i].call(obj);  
            }

            break;
        default:
            //
            break;

    }
}

var somecallback = function() {
    renderQueue('type1', { 'test': 'test' });   
}
somecallback();

http://jsfiddle.net/bk5670e5/

3 个答案:

答案 0 :(得分:1)

我猜这个:

queue[type][i].call(obj); 

应该就是这样:

queue[type][i](obj); 

当你使用#call时,第一个参数是&#34;这个&#34;上下文。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

答案 1 :(得分:0)

您可以使用立即调用的函数保留范围变量:

    var queue = {};
queue.type1 = [];

var renderQueue = function(type, obj) {
    console.log('type: '+ type)
    switch(type) {
        case 'type1':

            break;
        default:
            //
            break;

    }
}

var somecallback = function(type,obj) {
    return (function(t,o){renderQueue(t,o)}(type,obj));
}

queue.type1.push(somecallback('type1', { 'test': 'test' }))

queue.type1.push(somecallback('type2', { 'test': 'test' }))

for(var idx= 0;idx < queue.type1.length;idx++){
    queue.type1[idx];

}

答案 2 :(得分:0)

.call(this, param1, param2, etc);