gpt4 book ai didi

javascript - 将参数传递到 setTimeout 的闭包中

转载 作者:数据小太阳 更新时间:2023-10-29 05:40:47 24 4
gpt4 key购买 nike

我遇到了一个问题,我的应用程序位于 iframe 中,并且它是从外部域调用的。当 iframe 正确加载时,IE9 不会触发加载事件,所以我认为我无法使用 setTimeout 来轮询页面。

无论如何,我想看看我的 setTimeout 完成通常需要多长时间,所以我希望能够记录 setTimeout 从我的回调中触发的延迟,但我不确定如何将该上下文传递给它所以我可以记录它。

App.readyIE9 = function() {
var timings = [1,250,500,750,1000,1500,2000,3000];
for(var i = 0; i < timings.length; i++) {
var func = function() {
if(App.ready_loaded) return;
console.log(timings[i]);
App.readyCallBack();
};
setTimeout(func,timings[i]);
}
};

我在 IE9 的控制台中不断收到 LOG: undefined。

完成此任务的正确方法是什么?

谢谢

最佳答案

发生这种情况是因为您没有在 func 中关闭 i 的值。循环完成后,i 为 8 (timings.length),该值不存在于数组中。

你需要做这样的事情:

App.readyIE9 = function() {
var timings = [1,250,500,750,1000,1500,2000,3000];
for(var i = 0; i < timings.length; i++) {
var func = function(x) {
return function(){
if(App.ready_loaded) return;
console.log(timings[x]);
App.readyCallBack();
};
};
setTimeout(func(i),timings[i]);
}
};

关于javascript - 将参数传递到 setTimeout 的闭包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10855473/

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