以另一个函数作为参数调用的函数,无法完全理解其概念

时间:2019-02-28 22:00:01

标签: javascript function parameters

我有一个简单的函数声明:

repeat = (n, action) => {
     for(i=1; i<=n; ++i) {
          action(i);
     }
}

页面的后面我调用了repeat函数,但是将另一个函数用作“ action”参数:

let test_array = [];
     repeat(5, p => {
          test_array.push(p);
     })

这段代码应该将1,2,3,4,5存储到'test_array'数组中,但是在这种情况下我不太清楚'p'的作用。

2 个答案:

答案 0 :(得分:1)

在您的代码段中,p或多或少是一个回调函数。回调是要在另一个函数完成执行之后执行的函数。

在您的情况下,您正在创建另一个正在使用p的函数。

您只需登录p var即可看到此信息。 p是代码中的函数(回调),因此您应该看到输出了一个函数。

repeat = (n, action) => {
     console.log("Action: ", action);
     for(i=1; i<=n; ++i) {
          action(i);
     }
}


let test_array = [];
repeat(5, p => {
    test_array.push(p);
})

您的代码与具有以下代码相同:

repeat = (n, action) => {
     for(i=1; i<=n; ++i) {
     console.log(action);
          action(i);
     }
}


let test_array = [];
repeat(5, function(i) {
    test_array.push(i);
})
     
     
console.log(test_array);

请参阅:https://developer.mozilla.org/en-US/docs/Glossary/Callback_function

答案 1 :(得分:0)

p用作您提供给repeat()的匿名函数的参数。 (查看MDN overview of functions in JavaScript

您可以轻松地将非匿名(即命名)函数分配给对repeat的调用,因为函数在JavaScript中是一流的

function foo(i) {
  test_array.push(i);
}

repeat(5, foo); // => test_array now holds [1, 2, 3, 4, 5] just like before