Calling asynchronous functions identified by key

I'm trying to call a group of asynchronous functions identified by parameters.

Example: callFunctions("A,C"); would call both objFns["A"] and objFns["C"].

The problem I have run into is that arrayParams[i] is resolved when the internal function is finally called by async.parallel(). This means that i == arrayParams.length which of course crashes since objFns[arrayParams.length] is undefined. Help pointing me in the right direction would be appreciated.

objFns = {};
objFns["A"] = function (callback) {...}
objFns["B"] = function (callback) {...}
objFns["C"] = function (callback) {...}

function callFunctions(arrayParam) {
    var i, arrayFns = [];

    for (i = 0; i < arrayParams.length; i++) {
        arrayFns.push(function (callback) {
            objFns[arrayParams[i]](callback);
        }
    }

    async.parallel(arrayFns, function (error) {...});
}

You can use anonymous function to make copy of i on each iteration.

var async = require('async');

objFns = {};
objFns["A"] = function (callback) {callback();};
objFns["B"] = function (callback) {callback();};
objFns["C"] = function (callback) {callback();};

function callFunctions(arrayParams) {
  var i,arrayFns = [];

  for (i = 0; i < arrayParams.length; i++) {
    (function (i) {
      arrayFns.push(function (callback) {
        objFns[arrayParams[i]](callback);
      });
    })(i);
  }

  async.parallel(arrayFns,function(error) {
  });
}

callFunctions(['A', 'B']);

If you don't need to change functions behaviour you can simple copy functions to array without outer function.

var async = require('async');

objFns = {};
objFns["A"] = function (callback) {callback();};
objFns["B"] = function (callback) {callback();};
objFns["C"] = function (callback) {callback();};

function callFunctions(arrayParams) {
  var i,arrayFns = [];

  for (i = 0; i < arrayParams.length; i++) {
    arrayFns.push(objFns[arrayParams[i]]);
  }

  async.parallel(arrayFns,function(error) {
  });
}

callFunctions(['A', 'B']);

As far as i can tell, what you are pushing onto arrayFns is a function which directly calls another function with the same parameters, is there any reason why this should not work:

function callFunctions(arrayParam)
{
  var i,arrayFns = [];

  for (i = 0; i < arrayParams.length; i++)
  {
    arrayFns.push(objFns[arrayParams[i]]);
  }

  async.parallel(arrayFns,function(error) {...});
}