【问题标题】:pass a function as argument in javascript在javascript中将函数作为参数传递
【发布时间】:2020-03-24 21:46:31
【问题描述】:

我目前正在解决一个练习,我在将一个函数作为参数传递给另一个函数时遇到了问题。 练习是: 1.声明一个函数,它接受两个参数,ab,并返回这些参数的总和。 var add = function(a,b){return a+b;};

2.声明变量calculator,并为其分配一个函数,该函数接受三个参数,a,b 和c。在 calculator 的主体内,调用作为参数 c 传递的函数,作为参数 ab 传递。 var calculator = function(a,b,c=add(a,b)) { var invoke = c; console.log(invoke); };

3.invoke 计算将 sum 函数作为第三个参数传递给它。 它应该是这样的吗? calculate(x,y,sum());

提交代码时出现以下错误:函数calculate 应该打印调用undefined 的结果,以x 和y 作为参数;

谁能帮忙?

【问题讨论】:

  • 通过将括号sum()放在这里,您实际上是在调用函数并将其结果作为参数传递
  • 你应该这样写calculate(x,y,sum);。正如@Guerric 所说, sum() 正在调用该函数,并对其进行评估。您希望将包含函数的变量 sum 作为参数传递给 calculate(...)

标签: javascript function


【解决方案1】:

“调用作为参数a和b传递的函数c”对于c(a,b)来说是很多话

听起来第二步的结果应该是这样的:

var calculator = function(a,b,c) { return c(a,b) }

【讨论】:

    【解决方案2】:

    您应该了解什么是“一流功能”。实际上就是说函数就像一切一样都是值。

    var a = f()var a = f 之间存在巨大差异。前者调用,或运行f 并将结果保存在a。后者将f本身保存在a中。这意味着a 是一个函数,您可以执行a() - 等于f()

    如果你想创建一个以另一个函数为参数的函数(新函数称为高阶函数,现有的函数是回调),你这样做:

    function add(a, b) {
      return a + b;
    }
    
    function calculator(a, b, callback) {
      return callback(a, b); // Invoke the function stored in `callback` with parameters `a` and `b` and return the result
    }
    

    现在我把第三部分留给你作为练习……

    编辑:

    从 ES6 开始,你可以定义 function(param = default) 形式的默认参数,但是为了使用 add 作为默认值,你应该确保在 calculate 之前声明它,这样当 js 引擎看到 @987654334 @的声明它已经知道add是什么。

    【讨论】:

    • var add = function(a, b){ return a+b; }; var calculate = function(a,b,c= add){ var operate = c(a,b); console.log(c(a,b)); }; calculate(1,5);//打印正确的结果。然而,现在的错误是:>>>>代码不正确函数calculate应该打印以a和b作为参数调用undefined的结果
    • 对于这个基本问题我很抱歉,但我仍在开始用 JS 编写代码
    • 为什么要给c打两次电话?
    猜你喜欢
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多