gpt4 book ai didi

javascript - 如何用额外的函数调用参数替换闭包变量以避免不断重新创建函数?

转载 作者:行者123 更新时间:2023-11-30 08:27:02 24 4
gpt4 key购买 nike

给定:

list = [ "one", "something", "other" ];
foo = function () {
var str = "something",
bar = function (el, idx, array) {return el === str;};
return list.some(bar);
};
for (var i = 0; i < 10; i += 1) {
foo(); // true
}

bar 由 list.some() 使用三个参数调用。

如果我想在 foo 之外定义 bar,那么我必须像这样在闭包中给它 str:

list = [ "one", "something", "other" ];
bar = function (str) {
return function baz(el, idx, array) {return el === str;};
}
foo = function () {
var str = "something";
return list.some(bar(str));
};
for (var i = 0; i < 10; i += 1) {
foo(); // true
}

因此,每次调用 bar 时,都会在 bar 中创建/定义一个函数 baz。是否可以通过添加额外的
来避免重新创建闭包和常量函数bar 的 list.some() 调用的参数如下:

list = [ "one", "something", "other" ];
bar = function (el, idx, array, str) {return el === str;};
// Do something to bar's argument list so it's called with more than three arguments?
baz = function (str) {return bar(el, idx, array, str);}; // ????
foo = function () {
var str = "something";
return list.some(baz(str));
};
for (var i = 0; i < 10; i += 1) {
foo(); // true
}

更新:请注意,可以在上述示例中的循环中调用 foo。是否可以避免重新创建所有函数,使每个函数只创建一次?

我想向 bar 传递四个参数(或前三个参数之后的任意数量的参数,例如 bar = function (el, idx, array, str, ...)。目标是只创建任何一个函数一次。请不要使用外部图书馆。

最佳答案

使用 Function.bind 可以将上下文 this 设置为字符串。但是,function.bind 仍然会创建一个新函数。真的,没有函数就无法创建闭包。他们相互依赖。

我认为这是最干净的方法:

list = [ "one", "something", "other" ];
bar = function indexAndStringMatch(key) {
return function (el, idx, array) { return el === key && idx; };
}
foo = (function () {
var str = "something",
foundIt = array.some(bar(str));
}());

关于javascript - 如何用额外的函数调用参数替换闭包变量以避免不断重新创建函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43945571/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com