您有两个问题:
no
调用回调时将具有循环结束的值- 您将循环运行的同一时间的所有超时编程为2000 ms。
解决方法如下:
var t = 0while (no != 500) { (function(no) { t += 2000; setTimeout(function() { size(no,no);} ,t); })(no); no = no+50; // could be written no += 50}立即执行的函数将创建一个范围,以保护的值
no。
关于以下内容的一些解释
(function(no) {:变量的范围是
- 全球范围
- 一个功能
上面的代码可能被编写为
var t = 0while (no != 500) { (function(no2) { t += 2000; setTimeout(function() { size(no2,no2);} ,t); })(no); no += 50;}在这里,可能更清楚我们有两个变量:
no
,其值随每次迭代而变化,并且在调用超时时为500no2
,实际上no2
是内部匿名函数每次调用一个变量
每次调用内部匿名函数时,它都会声明一个新
no2变量,其值
no在调用时(在迭代过程中)。
no2因此,此变量受到保护,并由给的回调使用
setTimeout。



