日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

setTimeout面试题

發布時間:2024/1/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 setTimeout面试题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.考察閉包

// 輸出全為10

for(var i=0;i<10;i++){

???setTimeout(function(){

???????console.log(i);

???},50);

}

?

答1:使用閉包

for(var i=0;i<10;i++){(function(i){setTimeout(function(){console.log(i);},50);})(i);}

答2.使用ES6塊級作用域

for (let i = 0; i < 5; i++) {setTimeout(() => {console.log(i);}, 1000);}

?

二、考察異步

問下面console.log的順序

var arr = [1000,2000,1000];

for (let j = 0; j < arr.length; j++) {

setTimeout(() => {

console.log(j);

}, arr[j]);

}

答:

0,2,1

?

問:如何使上面console.log按順序執行?

答:使用遞歸

? var i = 0; function isfun() { //your code here 把邏輯寫在settimeout里,用遞歸的方式//-----console.log(i);let docs = [1000, 2000, 1000];(++i < 3) && setTimeout("isfun()", docs[i - 1]); /*或者通俗點這樣寫i++;if(i<30){setTimeout("isfun()", 3000);}*/ }?

?

改進:減少全局變量

function isfun2(k = 0) { //your code here 把邏輯寫在settimeout里,用遞歸的方式//-----console.log(k);let docs = [1000, 2000, 1000];(++k < 3) && setTimeout(() => {isfun2(k)}, docs[i - 1]);/*或者通俗點這樣寫i++;if(i<30){setTimeout("isfun()", 3000);}*/ }

三、編程題

題目:實現一個類,使每隔指定的秒數執行對應的console.log

new Queue()

.task(() => {

console.log(1)

}, 1000)

.task(() => {

console.log(2)

}, 2000)

.task(() => {

console.log(3)

}, 1000)

.run()

答:

class Queue {args = [];_self = this;task(fn,time) {this.args.push([fn,time]);return this._self;};run(k = 0) { let that = this;that.args[k][0]();(++k < that.args.length) && setTimeout(() => {that.run(k)}, that.args[k][1]);}}

?

總結

以上是生活随笔為你收集整理的setTimeout面试题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。