javascript - penggunaan setTimeout
phpcn_u1582
phpcn_u1582 2017-07-05 10:42:09
0
2
1089

http://ife.baidu.com/course/d...
Saya sedang membuat soalan daripada Baidu Front-End Academy, pautan ada di atas. Topiknya adalah untuk melaksanakan traversal pokok binari. Kod js adalah seperti berikut:

//绑定变量
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;
}

Tiada ralat dalam kod, tetapi saya tidak faham mengapa pemasa+=100 digunakan untuk masa dalam setTimeout
Mengapa 100 tidak boleh digunakan secara langsung?
Saya hairan. Pemula hadapan, sila berikan saya nasihat!

phpcn_u1582
phpcn_u1582

membalas semua(2)
代言

Maksud kod ini ialah nod yang dilalui mula-mula dipaparkan dalam warna merah, kemudian dalam warna putih, dan kemudian diteruskan ke nod seterusnya
Selang waktu ialah 0.1 saat
Mengapa +=100 dan bukannya 100
Abaikan asynchronous buat masa ini, ringkasnya
Pelaksanaan fungsi hanya mengambil masa seketika, dan traversal telah selesai Ia boleh difahami sebagai: Jika titik masa melaksanakan fungsi ialah 0s, maka titik pelaksanaan semua setTimeout(xxx,100) akan menjadi 0.1. s kemudian (ditambah pada baris gilir tugas, butiran pelaksanaan sebenar Masa tidak semestinya tepat kepada 0.1s, tetapi ini bukan perkaranya, jadi tidak perlu memahami kurungan, anda akan mengetahuinya kemudian)
Ini bermakna bahawa semua setTimeout() selesai dalam sekelip mata (rasanya js tidak akan berbuat apa-apa)

Kemudian +=100

bermaksud

setTimeout(xxx,100)
setTimeout(xxx,200)
setTimeout(xxx,300).... Ini akan dilaksanakan setiap 0.1s atau lebih

Ambil lubang lagi dan isi kemudian

三叔

pemasa+=100, mengekalkan selang masa tertentu, mungkin membolehkan anda melihat proses lintasan nod dengan kesan yang jelas.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan