javascript - 為什麼setTimeout括號內單雙引號及加號?
phpcn_u1582
phpcn_u1582 2017-05-19 10:14:49
0
4
672
雷雷
phpcn_u1582
phpcn_u1582

全部回覆(4)
刘奇

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是寫在中間,所以需要使用到兩個加號來進行連結。其實你這個的單雙引號還可以有其他的寫法,如果你會使用轉義符的話,在這裡就不給你詳細解釋了,你以後會慢慢的了解的!

習慣沉默

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); 
我想大声告诉你

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

曾经蜡笔没有小新


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


出處

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板