如何在不调用 javascript 函数的情况下查询它的参数

How to query the arguments of a javascript function without calling it

给定的命令队列如下所示。 .

var commandQueue = [
        function() {thing(100, 0, shiftFunc)},
        function() {thing(100, 233, shiftFunc)},
        function() {thing(100, 422, shiftFunc)}
];

如何编写一个函数,将commandQueue作为参数并将returns第二个参数(索引[1])的总和传递给队列中的函数而不调用函数在队列中?

不幸的是,这是不可能的。 JavaScript 无法查看函数定义内部。

您可以稍微重写一下,然后使用 map:

function thing(a, b) {
  return Math.pow(a * b, 2);
}
var commandQueue = [
  function() {
    return thing(100, 0);
  },
  function() {
    return thing(100, 233) % 6;
  },
  function() {
    return thing(100, 422) % 6;
  }
];
var commandResults = commandQueue.map(function(a) {
  return a();
});
console.log(commandResults);

您可以使用 Function#toString 和正则表达式,搜索第一个和第二个逗号之间的值。

var commandQueue = [
        function() {thing(100, 0, shiftFunc)},
        function() {thing(100, 233, shiftFunc)},
        function() {thing(100, 422, shiftFunc)}
];

console.log(commandQueue.reduce(function (r, a) {
     return r + +((a.toString().match(/,\s*(\d+),/) || [])[1] || 0);
}, 0));

你可以这样做:

const sum = commandQueue.reduce((acc, val) =>
  Number(val.toString().split(',')[1]) + acc, 0);
console.log(sum);

var commandQueue = [
    function() {thing(100, 0, shiftFunc)},
    function() {thing(100, 233, shiftFunc)},
    function() {thing(100, 422, shiftFunc)}
];


function getThingSecondArg(fn) {
    return +/thing\([^,]*,([^,]*)/.exec(fn)[1].trim();
};

function sum(arr) {
    for (var i=0, result=0; i<arr.length; i++) {
        result += arr[i];
    }
    return result;
}

console.log(sum(commandQueue.map(getThingSecondArg)));