提问人:Tim Gabrikowski 提问时间:3/19/2023 更新时间:3/19/2023 访问量:63
Javascript 在调用回调函数时添加参数
Javascript add param when calling a callback function
问:
我想在定义回调函数时为回调函数设置额外的参数。
// min Length validator
function minLengthValidator(input, minLength) {
console.log("Length is", input.length, "min Length is", minLength);
return input.length >= minLength;
}
// using the callback in an validate function (e.g. on an Input field) and only give it the input value
function validate(callback) {
let exampleInput = "myText";
let valid = callback(exampleInput);
return valid;
}
// call the validate function
validate(minLengthValidator);
但是如何在函数上设置 minLength 属性呢?该值由 validate 函数传入,但如何传递 minLength?minLengthValidator
您始终可以为每个函数定义一个自定义函数,并在其中调用 minLengthValidator 函数:
validate((value) => { return minLengthValidator(value, 4);});
但是有没有更好的方法呢?
答:
1赞
tkausl
3/19/2023
#1
函数式编程为我们提供了轻松解决这个问题的工具。
// min Length validator
function minLengthValidator(minLength) {
return function(input) {
console.log("Length is", input.length, "min Length is", minLength);
return input.length >= minLength;
}
}
validate(minLengthValidator(5));
0赞
Unmitigated
3/19/2023
#2
您可以切换 的参数顺序,然后使用 Function#bind
设置第一个参数的值。minLengthValidator
function minLengthValidator(minLength, input) {
console.log("Length is", input.length, "min Length is", minLength);
return input.length >= minLength;
}
function validate(callback) {
let exampleInput = "myText";
let valid = callback(exampleInput);
return valid;
}
console.log(validate(minLengthValidator.bind(null, 4)));
评论
0赞
Tim Gabrikowski
3/19/2023
很好的答案,有效,但我不喜欢绑定每个电话。我知道我没有澄清我的用例,但稍后它将是一个包含函数的数组,然后绑定到每个条目不是我想要的。但感谢您的回答!学到了新东西!null
validators
null
0赞
Unmitigated
3/19/2023
@Tim-Gabrikowski 在这里只是设置函数的上下文。您根本不使用该值,因此它不会影响任何内容(只有第一个参数之后要绑定的参数会影响参数值)。但是你使用什么风格取决于你。null
this
this
0赞
Tim Gabrikowski
4/18/2023
你能告诉我如何使用多个参数来做到这一点,比如如果我想只构建一个将 和 length 作为参数的验证器?你对此有想法吗?length
min
max
0赞
Unmitigated
4/18/2023
@TimGabrikowski 这是同样的想法:例如,where 取两个参数,顺序为最小值、最大值。lengthValidator.bind(null, 3, 5)
lengthValidator
评论