【问题标题】:javascript inline function - what are the results?javascript 内联函数 - 结果是什么?
【发布时间】:2019-12-01 19:28:38
【问题描述】:

这个函数返回什么?我不熟悉这个命名法。

let x = 2;
let y = 8;
const a = function(b) { return function(c) { return x + y + Math.abs(b) + c; } };

// Statement will go here

const fn = a(x);

对于上面的函数,x+y部分我理解了,但是后半部分所指的b和c是什么? a(x) 是调用 const a 吗?

我发现唯一提到类似命名法的是function x y a b in javascript,但讨论并没有讨论如何找到返回的内容。也许我没有在寻找正确的东西,这就是为什么我的搜索只返回了一件相似的东西。

【问题讨论】:

  • 看起来像咖喱:javascript.info/currying-partials!
  • a(2) 返回一个函数,与function(c) { return x + y + Math.abs(2) + c; } 相同
  • fn = v => 2 + 8 + 2 + v
  • 感谢 cmets。 @LawrenceCherone 或 zerkms,v 或 c 是什么?它必须返回 fn 的已解决表达式...
  • 是的,我的 v 是你的 c ;p 这是你传递给fn(123)的值

标签: javascript function inline


【解决方案1】:

a 是接受参数b 的函数的结果。该函数返回另一个接受参数c 的函数并返回x + y + c 加上b 的绝对值。

let x = 2;
let y = 8;
const a = function(b) {
  console.log({
    b
  });
  return function(c) {
    console.log({
      c
    });
    return x + y + Math.abs(b) + c;
  }
};

// Statement will go here

const fn = a(x);

fn(12) // will have b=2 and c=12

【讨论】:

  • 你是说 c 是在 a(x) 中作为 x 传递的东西吗?那么会是2+8+2+2吗?我正在计算 fn 调用会返回 14。
  • @Michele c 是您传递给fn 调用的内容。你传递给a 调用的是b
【解决方案2】:

它看起来像一个函数指针。 function(b) 接受传递给函数指针a 的参数x,该函数指针引用function(b),但与立即返回值的普通函数不同,function(b) 返回另一个函数function(c),当然接受一个参数,该参数应在调用const fn 时填写。

我的理论是,当您调用 fn 例如 fn(3) 时,您将获得等同于 2 + 8 + Math.abs(2) + 3; 的结果

如果没有 const fn,您也可以像 a(2)(3) 一样调用 a,我相信这会产生相同的结果。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    您在此处看到的称为柯里化,与部分应用相关,但与部分应用不同。

    关键是将带多个参数的函数调用分解为带单个参数的多个函数调用。

    在这种情况下,a 是一个函数,该函数返回一个函数,该函数返回一个函数,该函数返回的结果是 xyb 的绝对值(来自对 a 的调用)和 @987654326 @(来自对a的调用返回值)。

    【讨论】:

    • “一种称为部分应用的形式” --- 柯里化不是部分应用的“形式”。部分应用是部分应用柯里化函数的结果。重申一下 OP 示例:fn 是部分应用的 a,它是一个柯里化函数。
    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2021-09-04
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多