专家。Javascript没有产生期望的延迟效果<从其他问题开始,我知道,问题在于settimeout和我使用它的方式。但我仍然无法理解Settimeout是如何工作的。所以我把代码放在这里。出于知识目的,只需要使用Javascript
事实上,我正试图用javascript来澄清我关于这个闭包的概念。它们是Javascript中扭曲的东西吗?
var objImg = new Object();
var h;
var w;
var no = 100;
while (no != 500) {
setTimeout(function () {
size(no, no);
}, 2000);
/* it's get executed once, instead of repeating with while loop
Does it leave loop in mid? I get image with 500px height and
width, but effect is not acheived.
*/
no = no + 50;
}
function size(h, w) {
var objImg = document.getElementsByName('ford').item(0);
objImg.style.height = h + 'px';
objImg.style.width = w + 'px';
}
您的问题在于size()函数语法
var objImg = new Object();
var h;
var w;
var no = 100;
var int = window.setInterval(function () {
size(no,no);
no += 50;
},2000)
function size(h, w) {
if (h == 500){
window.clearInterval(int);
return;
}
var height = h + 'px';
var width = w + 'px';
document.getElementsByName('ford').item(0).style.height = height;
document.getElementsByName('ford').item(0).style.width = width;
}
http://jsfiddle.net/AQtNY/2/
为什么不直接使用setInterval()呢?
var objImg = new Object();
var h;
var w;
var no = 100;
var myInterval = window.setInterval(function() {
size(no, no);
no = no + 50;
if (no >= 500) clearInterval(myInterval);
}, 2000);
function size(h, w) {
var objImg = document.getElementsByName('ford').item(0);
objImg.style.height = h + 'px';
objImg.style.width = w + 'px';
}
你有两个问题:
no
在调用回调时将具有循环结束的值以下是你如何解决这个问题:
var t = 0
while (no != 500) {
(function(no) {
t += 2000;
setTimeout(function() { size(no,no);} ,t);
})(no);
no = no+50; // could be written no += 50
}
立即执行的函数创建一个范围来保护no
的值。
关于(函数(no){
)的一点说明:
变量的作用域是
上面的代码可以写成
var t = 0
while (no != 500) {
(function(no2) {
t += 2000;
setTimeout(function() { size(no2,no2);} ,t);
})(no);
no += 50;
}
这里可能更清楚的是,我们有两个变量:
no
,其值随着每次迭代而变化,当调用超时时为500no2
,实际上是一个变量no2每次调用内部匿名函数每次调用内部匿名函数时,它都会声明一个新的no2
变量,其值在调用时(迭代期间)为no
。因此,该变量no2
受到保护,并由setTimeout
的回调使用。
问题内容: 我希望我的for循环不应该一次执行,而要在每次迭代后等待超时。例如: 我发现了很多关于堆栈溢出的解决方案,例如: 但是在所有实现中,循环最初等待3000毫秒,然后立即执行整个循环。有没有一种方法可以等待1000毫秒后调用每次迭代。 问题答案: 您可以使用简单的数学方法来解决: 1000ms:0 4000ms:1 7000ms:2 10000ms:3 13000ms:4 … 跟随评论 您
问题内容: Firefox总是加载动态图像,但是IE只是显示图像而没有任何动态动作。我需要做些什么改变? IE查看源代码中的JavaScript代码: 我正在使用Wicket框架,所以真正的Java代码是: 加载我的动态图像的html页面是: 问题答案: 解决了我的问题。可能对其他人有用: 回答: HTML源代码: HTML:
网络编程中经常使用gethostbyname和getaddrinfo来实现域名解析,这两个C函数并未提供超时参数。实际上可以修改/etc/resolv.conf来设置超时和重试逻辑。 !> 可参考man resolv.conf文档 多个 NameServer nameserver 192.168.1.3 nameserver 192.168.1.5 option rotate 可配置多个names
以上将给出以下随机输出: 任务很简单:确保每个promise只在另一个promise之后运行()。 由于某种原因,我找不到一个方法来做这件事。 我尝试了生成器函数(),尝试了返回promise的简单函数,但最终都归结为同一个问题:循环是同步的。 对于async,我只需使用。 你怎么解决?
问题内容: 专家。JavaScript无法产生所需的延迟效果。 从其他问题上,我因此知道,问题在于settimeout及其使用方式。但是我仍然无法理解Settimeout的工作原理。所以我将代码放在这里。由于知识目的,仅需使用Javascript。 实际上,我正在尝试清除有关 此的 概念,即javascript中的 闭包 。它们是Java的扭曲事物吗? 问题答案: 您有两个问题: 调用回调时将具有
当微服务处理业务逻辑时间过长,网关会报超时错误,默认等待时间是5秒。 可在网关指定spring.cloud.gateway.httpclient.response-timeout参数设置超时时间,单位毫秒 # 设置响应超时10秒 spring.cloud.gateway.httpclient.response-timeout=10000 更多配置参见:org.springframework.cl