代码之家  ›  专栏  ›  技术社区  ›  JeB

更改绑定函数参数

  •  1
  • JeB  · 技术社区  · 7 年前

    给出一个简单的函数:

    const a = (x) => (y) => x + y
    

    以及部分应用版本:

    const b = a(3)
    

    是否有方法更改中已绑定的参数 b ? 有点像

    b.boundArgs[0] = 5
    

    所以如果我打电话 b(5) 它会回来的 10 而不是 8


    一点背景:

    我使用一个库,它从一个库函数调用返回部分应用的函数。
    我必须修改第一个参数(由库函数应用),我不想复制粘贴此函数的实现除了这个小小的改动,我还是想和图书馆呆在一起。

    1 回复  |  直到 7 年前
        1
  •  2
  •   T.J. Crowder    7 年前

    不,你不能那样做,除非有问题的图书馆能做到它可以,但可能不会。

    基本上,你要问的是,如果你能进入执行上下文,一个函数会关闭并改变变量值(更准确地说, 绑定 )在这种情况下你不能默认使用更详细的示例:

    const a = (x) => {
        const b = (y) => x + y;
        return b;
    };
    

    默认情况下你什么也做不了 b 让你伸手去换 x 在环境中 关闭。

    早些时候我说过图书馆可以让你这么做,但很可能不会。这里有一种方法:

    const a = (x) => {
        const b = (y) => x + y;
        b.changeX = (newX) => {
            x = newX;
        };
        return b;
    };
    const b = a(3);
    b.changeX(10);
    console.log(b(5)); // 15 instead of 8

    你还是不知道 一定会 ,但你可以通过 changeX .

    或者libray可以在它返回的函数上使用一个属性:

    const a = (x) => {
        const b = (y) => b.x + y; // Note b.x
        b.x = x;                  // Initial value
        return b;
    };
    const b = a(3);
    b.x = 10;
    console.log(b(5)); // 15 instead of 8

    我并不是以任何方式暗示这是一个好主意,封装通常起着重要的作用只是指出这样做是可能的。

    推荐文章