gpt4 book ai didi

javascript - 调用列表中的每个函数

转载 作者:数据小太阳 更新时间:2023-10-29 04:08:16 25 4
gpt4 key购买 nike

我有一组函数,正在寻找一种简洁的方法来按顺序调用每个函数。

fns = [
function a() { console.log('a') },
function b() { console.log('b') },
function c() { console.log('c') },
]

这个有效:

fns.map(function (f) { f() })

还有这个:

fns.map(function (f) { Function.call.call(f) })

但是这引发了 TypeError:

fns.map(Function.call.call)

为什么后一个示例不起作用?

最佳答案

for (var i = 0, len = fns.length; i < len; i++) {
fns[i].call();
};

这是工作 fiddle .

使用 Function.prototype.callFunction.prototype.apply 调用函数。使用 callapply,您可以将执行范围和 arguments 传递给函数调用。如果你不需要,你可以简单地做:

for (var i = 0, len = fns.length; i < len; i++) {
fns[i]();
};

关于您的代码:

Array.prototype.map 是一个以callbackscope 作为参数 的函数。在前两个示例中,您使用匿名函数作为回调,并调用由Array.prototype.map 自动传递给它的参数。扩展一下,您的代码等同于:

function single(element) {
element();
};
fns.map(single);

所以上面的说法是完全正确的。通过使用 Function.call.call 遵循相同的原则,您正在调用由 map 作为参数传递的函数 f

但在您的第三个示例中,您通过 Function.call.prototype.call 强制执行直接调用,但是在这种情况下,f不再作为参数传递,这意味着您的 Function.call.call 将尝试调用 undefined,因此您会收到 TypeError。当您将 Function.call.call 放入 map() 时,您不是callback 作为参数传递.

调用 将立即进行。 Function.call.callFunction.call.call()Function.call.call(undefined) 完全相同,当您像在第三个示例中那样使用时,将立即对其进行评估。

关于javascript - 调用列表中的每个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15923179/

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