gpt4 book ai didi

javascript - IIFE 和带有 setInterval plain JS 的箭头函数

转载 作者:行者123 更新时间:2023-11-30 19:41:34 25 4
gpt4 key购买 nike

我有以下代码:

window.setInterval((array => {
console.log(array[0]++);
console.log(array[1]++);
})([0, 0]), 500);

我预计上面的代码每次运行(500 毫秒)都会产生 00。然而,事实并非如此。它只运行了一次。当我尝试时:

window.setInterval((array => () => {
console.log(array[0]++);
console.log(array[1]++);
})([0, 0]), 500);

成功了。我认为第一个仍然会每 500 毫秒打印出 00,因为带有参数 array 的 IIFE 将始终被赋予值 [0, 0] 每次运行(然而,情况并非如此,它只运行一次!)。然后,第二个代码以某种方式允许 array“记住”它以前的值并在每次运行时更新它的值。有人可以给我解释一下吗?

最佳答案

传递给 setInterval 的第一个参数应该是一个函数。在第一个片段中,您立即调用一个函数并返回undefined:

window.setInterval((array => {
console.log(array[0]++);
console.log(array[1]++);
})([0, 0]), 500);

相当于

window.setInterval(() => {
// do something, return undefined
})(), 500);

一旦评估了 IIFE:

window.setInterval(undefined, 500);

因此,您需要类似第二个片段的内容,其中 IIFE 还返回一个函数:

window.setInterval((array => () => {
console.log(array[0]++);
console.log(array[1]++);
})([0, 0]), 500);

不过,您可能会考虑在外部 IIFE 中定义 array 以使代码更清晰一些:

window.setInterval(
(() => {
const array = [0, 0];
return () => {
console.log(array[0]++);
console.log(array[1]++);
};
})(),
500
);

关于javascript - IIFE 和带有 setInterval plain JS 的箭头函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55331008/

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