Rumah > Soal Jawab > teks badan
例如[1,2,3] 第1秒钟打印1,第2秒钟打印2,第3秒钟3...
我是这样写的:
js
function foo(arr) { if(Object.prototype.toString.call(arr).slice(8,-1) !== "Array") return; var length = arr.length; var i = 0; return function(){ if(i<length) console.log(arr[i++]); } } setInterval(foo([1,2,3]),1000);
有没有更好点的写法,请教了,谢谢。 =.=
阿神2017-04-10 15:03:19
javascript
function print(array){ var tmp = array.slice(); var interval = setInterval(function(){ if (tmp.length>0) { console.log( tmp.shift() ); }else{ clearInterval(interval); } },1000); }
这种怎么样 ?
伊谢尔伦2017-04-10 15:03:19
个人觉得这样很清晰~
function test(arr) {
var i = 0;
var length = arr.length;
var flag = setInterval(function(){
console.log(arr[i++]);
if(i >= length)
clearInterval(flag);
},1000);
}
test([1,2,3,4]);
PHP中文网2017-04-10 15:03:19
我觉得这种好,不需要循环,利用 Array自带的函数,效率也好。
(function print(array){
var tmp = array.slice();
var getFrist = setInterval(function(){
if (tmp[0]) {
console.log( tmp.shift() );
}else{
clearInterval(getFrist);
}
},1000);
})([1,2,3,4,5])
黄舟2017-04-10 15:03:19
(function(arr){
var i=0,length=arr.length;
(function a(){
setTimeout(function(){
console.log(arr[i++]);
i<length&&a();
},1000)
}())
}([1,2,3,4]))
应该是最省的写法了吧,也没用for,也没有全局变量。相对于调用Array的方法移除数组项目,使用index直接读取值性能会高一点
怪我咯2017-04-10 15:03:19
偷师学艺,借鉴排名第一的答案,如果用setTimeout()实现可以这样写:
javascript
(function(arr){ var i=0; length=arr.length; (function a(){ setTimeout(function(){ if(i<length) console.log(arr[i++]); a(); },1000); }()) }([9,6,4,7,'r','t']));
如果是用setInterval()实现可以这样写:
javascript
(function(arr){ var i=0; length = arr.length; (function(){ setInterval(function(){ if(i<length) console.log(arr[i++]); },1000); }()) }([9,6,4,7,'r','t']));
基本上思路差不多,我也是个小白,匿名函数自执行也是最近学习了一点,我这里写一下我的分解思路,就当做是小白的一个读书笔记吧:
首先,一开始先想到遍历数组挨个打印,于是就是这样:
javascript
var arr = [9,6,4,7,'r','t']; for(var i=0; i<arr.length; i++){ console.log(arr[i]); }
其次再在这个基础上想到匿名函数自执行把arr作为形参,具体数组作为实参,于是就是下面这样:
javascript
(function(arr){ var i=0; length = arr.length; for(i; i<length; i++){ console.log(arr[i]); } }([9,6,4,7,'r','t']));
最后想到用匿名函数自执行并使用setInterval()实现每一秒挨个打印:
javascript
(function(arr){ var i=0; length = arr.length; (function(){ setInterval(function(){ if(i<length) console.log(arr[i++]); },1000); }()) }([9,6,4,7,'r','t']));
再在这个基础上参(fu)考(zhi)排名第一的答案用setTimeout()实现此效果:
javascript
(function(arr){ var i=0; length=arr.length; (function a(){ setTimeout(function(){ if(i<length) console.log(arr[i++]); a(); },1000); }(i)) }([9,6,4,7,'r','t']));
感谢楼上各位大牛的答案,菜鸟我受教了。
高洛峰2017-04-10 15:03:19
var array = [1, 2, 3, 4, 5]
var i = 0;
var interval = setInterval(function () {
if (i >= array.length) {
clearInterval(interval);
return;
}
console.log(array[i]);
i = i + 1;
}, 1000);
黄舟2017-04-10 15:03:19
var i =1;
for(i; i<3; i++){
(function(num){
setTimeout(function(){
console.log(num);
}, num*1000);
})(i);
}
上面的只想说,能不能用setTimeou替代setInterval