gpt4 book ai didi

javascript - 为什么在 Javascript 中 .shift() 之后要使用一组额外的括号?

转载 作者:行者123 更新时间:2023-11-28 15:49:03 24 4
gpt4 key购买 nike

下面为什么在queue.shift()后面添加(input)?

var puzzlers = [
function ( a ) { return 8*a - 10; },
function ( a ) { return (a-3) * (a-3) * (a-3); },
function ( a ) { return a * a + 4; },
function ( a ) { return a % 5; }
];

var start = 2;

var applyAndEmpty = function( input, queue ) {
var length = queue.length;
for(var i = 0; i<length; i++){
input = queue.shift()(input);
}
return input;
};

alert(applyAndEmpty(start, puzzlers));

很明显,将输入移动到 shift() 括号中,它返回函数本身而不是正确的值。但是在(我找不到这方面的文档)之后放置(输入)的准则是什么?

最佳答案

因为数组的元素是函数。函数是 JavaScript 中的对象;它们可以传递、存储在数组中并从其他函数返回。你可以写成:

var fn = queue[0]; // a function object
var input = fn(input); // execute the function

现在您已经了解了第一类函数,执行序列(或队列)的另一种方法是组合,其中不是执行函数,而是分配值,然后执行下一个函数,您将创建一个函数是所有其他函数的组合,假设它们的输入和输出匹配,例如:

function compose() {
return [].reduce.call(arguments, function(f,g) {
return function() {
return g(f.apply(this, arguments));
};
});
};

var puzzle = compose.apply(null, puzzlers);
var result = puzzle(2);
console.log(result); //=> 3

关于javascript - 为什么在 Javascript 中 .shift() 之后要使用一组额外的括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21226560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com