【发布时间】:2021-01-15 21:01:07
【问题描述】:
我有一个 getValidators 函数,它返回一个带有验证器方法的对象:
export function getValidators() {
return {
required: (node, value, [mark='', falsy=[undefined, '']]) => {
const notValid = falsy.includes(value);
return setNotValid(node, notValid, mark);
},
// ... other validator functions ...
};
};
所有验证器函数都有三个参数:节点、值和数组:args
我可以运行验证器功能:
let validator = 'required';
let validators = getValidators()
let result = validators[validator](node, value, args);
但我喜欢使用来自某个外部范围的参数节点和值来运行下面修改后的验证器函数:
export function getValidators() {
return {
required: ([mark='', falsy=[undefined, '']]) => {
const notValid = falsy.includes(value);
return setNotValid(node, notValid, mark);
},
// ...
};
};
并喜欢如下图运行:
// ... node and value args passed in from outer scope ...?
let result = validators[validator](args);
更新:我不能使用getValidators(node, value),因为会首先调用 getValidators 来添加额外的验证器函数。
let validators = getValidators();
validators[method] = aValidatorFunc;
.....
.....
function runValidators() {
.....
// use the updated validators instance to run the validators
for (let validator of .....) {
// node and value will change in this loop as well
...
let result = validators[validator](args);
}
...
}
【问题讨论】:
-
那么你的问题是什么?哪个部分不工作?你哪里有问题?
-
如何从外部作用域传入(节点,值)?
-
为什么不使用参数?这就是他们的目的。以及“外部作用域”到底是什么意思
-
是的,这是可能的。 “
node和value来自某个外部范围” - 那么,来自 哪个 外部范围?它们目前在您修改的代码中根本不存在。
标签: javascript scope closures