更改绑定函数参数

Change bound function parameters

给定一个简单的函数:

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

及其部分应用的版本:

const b = a(3)

有没有办法改变b中已经绑定的参数?像

b.boundArgs[0] = 5

所以如果我调用 b(5) 它会 return 10 而不是 8


一些背景知识:

我使用的库 return 作为库函数调用之一的结果部分应用了函数。
我必须修改第一个参数(由库函数应用)并且我不想复制粘贴此函数的实现。除了这个小改动外,我想留在图书馆。

不,除非相关图书馆允许这样做,否则您不能这样做。它可以,但可能不会。

基本上您要问的是您是否可以进入函数关闭的执行上下文并在该上下文中更改变量值(更准确地说,绑定)。你不能默认。使用更详细的示例:

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

默认情况下,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

您仍然无法找出x绑定到b的内容,但您可以通过changeX更改它。

或者库可以只在函数上使用 属性 returns:

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

我并不是以任何方式暗示这是个好主意,封装通常具有重要的用途。只是指出可以做这种事情。