如何在不调用 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)));
给定的命令队列如下所示。 .
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)));