javascript - 更改绑定函数参数
问题描述
给定一个简单的函数:
const a = (x) => (y) => x + y
及其部分应用的版本:
const b = a(3)
有什么办法可以改变已经绑定的参数b
吗?就像是
b.boundArgs[0] = 5
所以如果我打电话b(5)
它会返回10
而不是8
一点背景:
我使用一个库,它返回部分应用的函数作为库函数调用之一的结果。
我必须修改第一个参数(由库函数应用)并且我不想复制粘贴此函数的实现。除了这个小修改外,我想留在图书馆。
解决方案
不,你不能这样做,除非有问题的图书馆可以做到这一点。它可以,但可能不会。
基本上你要问的是你是否可以进入一个函数关闭的执行上下文并在该上下文中更改变量值(更准确地说是bindings)。你不能默认。使用更详细的示例:
const a = (x) => {
const b = (y) => x + y;
return b;
};
默认情况下,您无能为力b
,让您进入并更改x
环境b
关闭。
之前我说过图书馆可以让你这样做,但可能不会。这是它可以做到这一点的一种方法:
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
.
或者库可以只在它返回的函数上使用一个属性:
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
我并不是以任何方式暗示这是一个好主意,封装通常有一个重要的目的。只是指出有可能做这种事情。
推荐阅读
- python-3.x - 如何在从 csv 读取或写入 csv 时保留数据帧的数据类型“列表”
- jquery - 有没有办法使用数据表 Jquery 隐藏表中的列 ID?
- c++ - 如何从包含的类中执行函数
- python - 将列中心的像素图与 QTreeView 和 QAbstractItemModel 对齐
- c++ - 如何在 Visual Studio 2017 和 C++ 中自动生成注释?
- mysql - 这个 sql 查询有什么问题
- python-3.x - 无法使用 python 重置 AD 用户密码
- windows - 无法将 *.amazonaws.com 添加到 Internet Explorer 11 中的受信任站点
- python-2.7 - SWIG-Python:如何垃圾收集 int 指针
- django - 将 postgresql10.8 与 django2.1.3 连接时遇到问题