首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >高阶函数

高阶函数
EN

Stack Overflow用户
提问于 2021-06-04 15:16:32
回答 3查看 327关注 0票数 0

我有一个关于JavaScript的练习。这个练习要求我使用高阶函数.到目前为止,我已经成功地指定了一些函数,但是当我试图执行代码时,结果似乎不能正常工作。我有一些图片给你一个想法,希望,你可以帮助我纠正这一点。

  • 线程是:编写函数循环(循环、数字、函数),它运行给定的函数次数。还编写简单函数halve()和square().

  • 这是我的代码:

代码语言:javascript
复制
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));

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-06-04 17:48:20

所以首先要做的是:高阶函数是处理其他函数的函数。之所以没有定义,是因为您正在调用一个不返回任何内容的函数。

代码语言:javascript
复制
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

第二,当您可能应该使用循环时,您将使用n作为for循环,因此它按照“循环”指示的次数执行预期的代码,而不是插入的数字(即200、5、99)。

通过在循环中包含"console.log“,您可能会在输出中得到许多不想要的”程序结束“,所以在我的版本中,我将它排除在循环之外。

我相信,给出的另外两个答案是相当完整的,但是如果您想保留for循环,请在下面这样做:

代码语言:javascript
复制
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));
票数 0
EN

Stack Overflow用户

发布于 2021-06-04 15:50:24

当前的loop函数声明一个内部函数,然后退出。呃,什么都没发生-

代码语言:javascript
复制
function loop(loops,number,func){

    // declare loops function
    var loops= function(n){
         // ...
    }

    // exit `loop` function
}

其中一个修复方法可能是在for循环中多次运行提供的for,如@code_monk建议的那样。另一个选择是使用递归-

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2021-06-04 15:28:42

有一种方法

代码语言:javascript
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67839766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档