高阶函数
Higher-order function
我有一个关于 JavaScript 的练习。这个练习要求我使用高阶函数。到目前为止,我已经设法指定了一些功能,但是当我尝试执行代码时,结果似乎无法正常工作。我有一些图片可以给你一个想法,希望你能帮助我纠正这个问题。
线程是:编写函数loop(loops, number, func),它运行给定的函数给定的次数。还要编写简单的函数 halve() 和 square()。
这是我的代码:
function loop(loops, number, func) {
var loops = function(n) {
for (var i = 0; i < n; i++) {
if (i < 0) {
console.log('Programme ended')
}
if (i > 0) {
return n;
}
}
}
}
var halve = function(n) {
return n / 2
}
var square = function(n) {
return n ** 2;
}
console.log(halve(50));
console.log(loop(5, 200, halve));
console.log(loop(3, 5, square));
console.log(loop(-1, 99, halve));
这是一种方法
const loop = (loops, n, fn) => {
for (let i=0; i<loops; i++) {
console.log( fn(n) );
}
};
const halve = (n) => {
return n / 2;
};
const square = (n) => {
return n ** 2;
};
loop(2,3,halve);
loop(4,5,square);
您当前的 loop
函数声明了一个内部函数,然后退出。也就是说,实际上什么都没有发生 -
function loop(loops,number,func){
// declare loops function
var loops= function(n){
// ...
}
// exit `loop` function
}
一个这样的修复可能是在 for
循环中多次 运行 提供的 func
,就像@code_monk 建议的那样。另一种选择是使用递归 -
function loop (count, input, func) {
if (count <= 0)
return input
else
return loop(count - 1, func(input), func)
}
function times10 (num) {
return num * 10
}
console.log(loop(3, 5, times10))
// 5000
首先要做的是:高阶函数是作用于其他函数的函数。
你得到 undefined 的原因是因为你正在调用一个没有 return 任何东西的函数。
function x(parameter){
result = parameter + 1;
}
// -> returns undefined every time
console.log(x(5));
// -> undefined
function y(parameter){
return parameter+1;
}
// -> returns a value that can be used later, for example in console.log
console.log(y(5));
// -> 6
其次,当您可能应该使用 loops 时,您在 for 循环 中使用了 n,因此它会多次执行预期的代码因为“循环”表示而不是您插入的数字(即 200、5、99)。
通过在循环中使用“console.log”,您可能会在输出中得到很多不需要的“程序结束”,因此在我的版本中,我将其排除在循环之外。
我相信给出的其他两个答案非常完整,但如果您想保留 for 循环,请执行以下操作:
function loop(loops, number, func){
if(loops>0){
for(let i = 0; i< loops; i++){ // let and const are the new ES6 bindings (instead of var)
number = func(number)
}
return number
}
else{
return "Programme ended"
}
}
function halve(n) { // maybe it's just me but using function declarations feels cleaner
return n / 2;
}
function square(n) {
return n ** 2;
}
console.log(halve(50));
console.log(loop(5, 200, halve));
console.log(loop(3, 5, square));
console.log(loop(-1, 99, halve));
我有一个关于 JavaScript 的练习。这个练习要求我使用高阶函数。到目前为止,我已经设法指定了一些功能,但是当我尝试执行代码时,结果似乎无法正常工作。我有一些图片可以给你一个想法,希望你能帮助我纠正这个问题。
线程是:编写函数loop(loops, number, func),它运行给定的函数给定的次数。还要编写简单的函数 halve() 和 square()。
这是我的代码:
function loop(loops, number, func) {
var loops = function(n) {
for (var i = 0; i < n; i++) {
if (i < 0) {
console.log('Programme ended')
}
if (i > 0) {
return n;
}
}
}
}
var halve = function(n) {
return n / 2
}
var square = function(n) {
return n ** 2;
}
console.log(halve(50));
console.log(loop(5, 200, halve));
console.log(loop(3, 5, square));
console.log(loop(-1, 99, halve));
这是一种方法
const loop = (loops, n, fn) => {
for (let i=0; i<loops; i++) {
console.log( fn(n) );
}
};
const halve = (n) => {
return n / 2;
};
const square = (n) => {
return n ** 2;
};
loop(2,3,halve);
loop(4,5,square);
您当前的 loop
函数声明了一个内部函数,然后退出。也就是说,实际上什么都没有发生 -
function loop(loops,number,func){
// declare loops function
var loops= function(n){
// ...
}
// exit `loop` function
}
一个这样的修复可能是在 for
循环中多次 运行 提供的 func
,就像@code_monk 建议的那样。另一种选择是使用递归 -
function loop (count, input, func) {
if (count <= 0)
return input
else
return loop(count - 1, func(input), func)
}
function times10 (num) {
return num * 10
}
console.log(loop(3, 5, times10))
// 5000
首先要做的是:高阶函数是作用于其他函数的函数。 你得到 undefined 的原因是因为你正在调用一个没有 return 任何东西的函数。
function x(parameter){
result = parameter + 1;
}
// -> returns undefined every time
console.log(x(5));
// -> undefined
function y(parameter){
return parameter+1;
}
// -> returns a value that can be used later, for example in console.log
console.log(y(5));
// -> 6
其次,当您可能应该使用 loops 时,您在 for 循环 中使用了 n,因此它会多次执行预期的代码因为“循环”表示而不是您插入的数字(即 200、5、99)。
通过在循环中使用“console.log”,您可能会在输出中得到很多不需要的“程序结束”,因此在我的版本中,我将其排除在循环之外。
我相信给出的其他两个答案非常完整,但如果您想保留 for 循环,请执行以下操作:
function loop(loops, number, func){
if(loops>0){
for(let i = 0; i< loops; i++){ // let and const are the new ES6 bindings (instead of var)
number = func(number)
}
return number
}
else{
return "Programme ended"
}
}
function halve(n) { // maybe it's just me but using function declarations feels cleaner
return n / 2;
}
function square(n) {
return n ** 2;
}
console.log(halve(50));
console.log(loop(5, 200, halve));
console.log(loop(3, 5, square));
console.log(loop(-1, 99, halve));