javascript - setTimeout的使用問題
phpcn_u1582
phpcn_u1582 2017-07-05 10:42:09
0
2
1030

http://ife.baidu.com/course/d...
在做百度前端學院的題目,連結如上。題目是實現一個二元樹的遍歷。 js程式碼如下:

//绑定变量
var root=document.getElementById("root");
var btn1=document.getElementById("btn1");
var btn2=document.getElementById("btn2");
var btn3=document.getElementById("btn3");
var timer=0;
//显示节点
function showNode(node){
    //node.style.backgroundColor = 'red';
    alert(timer);
    setTimeout(function(){
        node.style.backgroundColor="red";
    },timer+=100);
    setTimeout(function(){
        node.style.backgroundColor="#ffffff";
    },timer+=100);
}
//先序遍历
function preOrder(node){
    if(!(node == null)){
        showNode(node);
        preOrder(node.children[0]);
        preOrder(node.children[1]);
    }
}
//使用递归方式实现中序遍历
function inOrder(node){
    if(!(node == null)){
        //alert("btn2");
        inOrder(node.children[0]);//先访问左子树
        showNode(node);//再访问根节点
        inOrder(node.children[1]);//最后访问右子树
    }
}
//后序遍历
function postOrder(node){
    if(!(node == null)){
        postOrder(node.children[0]);
        postOrder(node.children[1]);
        showNode(node);
    }
}
//绑定事件
btn1.onclick=function(){
    preOrder(root);
    timer=0;
}
btn2.onclick=function(){
    inOrder(root);
    timer=0;
}
btn3.onclick=function(){
    postOrder(root);
    timer=0;
}

程式碼沒有錯誤,就是無法理解為什麼setTimeout中的時間要用timer =100?
為什麼不能直接用100呢?
百思不得其解。前端小白,求指教!

phpcn_u1582
phpcn_u1582

全部回覆(2)
代言

這個程式碼的意思是遍歷到的節點先顯示為紅色,再顯示為白色,再下一個節點繼續
間隔都為0.1秒
為什麼要+=100,而不是100
異步先不論,簡單來說
函數的執行只有一瞬,遍歷已經完成
可以理解為
如果執行函數的時間點為0s ,那麼所有setTimeout(xxx,100)的執行之間點在0.1s後(添加到任務隊列,真正執行的具體時間不一定準確在0.1s,不過這都不是重點,所以括號裡面不需要理解,以後會知道的)
意思就是所有的setTimeout()在一瞬間完成(感覺js會什麼都不干)

那麼 +=100
意思就是
setTimeout(xxx,100)
setTimeout(xxx,200)
setTimeout(xxx,300)....... 這些就會每隔0.1s左右執行

再佔個坑,等一下會填

三叔

timer+=100,保留一定的時間間隔,可能是想以明顯效果的方式,讓你看到節點遍歷的過程。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!