搜尋

首頁  >  問答  >  主體

javascript - 為什麼setTimeout括號內單雙引號及加號?

雷雷
phpcn_u1582phpcn_u15822811 天前677

全部回覆(4)我來回復

  • 怪我咯

    怪我咯2017-05-19 10:16:49

    function AddH(id) {

    var ulList = document.getElementById(id);
    var h = ulList.offsetHeight;
    h += 1;
    if(h<=42) {
        ulList.style.height = h + "px";
        setTimeout("AddH('"+id+"')",10);
    }
    else {
        return;
    }   

    }
    這是你自己寫的函數,然後裡面你使用 setTimeout("AddH('"+id+"')",10)來呼叫定時呼叫AddH函數。最外層的那個雙引號是可以有、也可以沒有,這個影響不大,就像上面那位說的一樣,setTimeout 可以接受字串作為程式碼運行。然後裡面的那對單引號,是因為你函數裡面的document.getElementById(id)根據id獲取標籤對象需要使用到,比如說如果你的id為hellow,然後你傳遞進去的值在不加單引號的情況下為hellow,傳到內部就變成document.getElementById(hellow) ,這樣子是不對的,因為document.getElementById(參數)這個函數的接收參數要是一個字串類型,所以一定要加上引號才可以,當你加上了引號之後傳入進去的值就為document.getElementById('hellow') ,這樣子透過腳本語法才可以取得到標籤物件。 至於最裡面的雙引號跟加號就是屬於連接符了,就像例如字串"hell" ,想要在尾部加入一個變數var i = "ow" ,如果是直接加入的話"hell"i 這樣子寫的話是會報錯的,所以就需要用到我們的連接符號+號碼了,要這樣子寫"hell" + i 組成的新字串就為"hellow"。在你的程式碼中因為你的變數id是寫在中間,所以需要使用到兩個加號來進行連結。其實你這個的單雙引號還可以有其他的寫法,如果你會使用轉義符的話,在這裡就不給你詳細解釋了,你以後會慢慢的了解的!

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-19 10:16:49

    setTimeout 可以接受字串作為程式碼運行。

    var id = 2; 
    var a = "AddH('"; 
    var b = id; 
    var c = "')"; 
    var todo = a + b + c; 
    console.log(todo); 
    
    var alertGenerator = function(str){
        return "alert('" + str + "')"; // alertGenerator('0v0') => 'alert("0v0")'; 
    }
    
    var alertHello = alertGenerator('hello'); 
    
    setTimeout(alertHello, 2000); 
    

    但是不建議傳遞字串給 setTimeout

    setTimeout("AddH('"+id+"')",10); 
    
    // => 
    setTimeout(function(){
        AddH(id); 
    }, 10); 

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-19 10:16:49

    不加的話,就函數自執行了

    回覆
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-19 10:16:49


    如果第一個參數是個字串,那麼就相當於eval,是可以自執行的。


    出處

    回覆
    0
  • 取消回覆