我一直有一個地方不是很理解,這次看到一段代碼很能說明問題:
function moveElement (elementID, final_x, final_y, interval) {
var elem = document.getElementById(elementID);
var xpos = parseInt(elem.style.left);
var ypos = parseInt(elem.style.top);
......
var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";
movement = setTimeout(repeat, interval)
}
我的疑問只有一個地方:
var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";
在這一段里,elementID
,final_x
,final_y
,interval
四個是傳入的參數(shù),除了第一個是字符串,后面三個都是數(shù)字。
我第一個不能理解的地方是這些參數(shù)為什么要加引號,第二個不能理解的是這里的加號有什么作用么。還有一個問題是像elementID
這個字符串,為什么包了兩層引號,在什么情況下需要這么做?
加號一般我認為適用于字符串拼接,但在這里顯然不是這樣,一對引號就是一個獨立的空間,加號包裹在這里面有什么意義么。
學習是最好的投資!
1.引號包住的是逗號
2.123456+"somestring"→"123456somestring"
3.elementId是String型參數(shù)所以加引號
首先,這里的加號的確是用來字符串拼接
var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";
的結果就是
var repeat = "moveElement(elementID, final_x, final_y, interval)"
只是,將這個名叫repeat的字符串變量作為參數(shù)傳給了setTimeout, 即在interval毫秒后,執(zhí)行repeat
var repeat = "moveElement('"+ elementID +"',"+ final_x +","+ final_y +","+ interval +")";
movement = setTimeout(repeat, interval)
這里其實基本等同于
movement = setTimeout(function () {
moveElement(elementID, final_x, final_y, interval)
}, interval)
這樣應該比較好理解吧?
但是這兩種方式還是有區(qū)別,一般不大推薦題主說的這種方式,具體可見window.setTimeout、Running string as function in javascript setTimeout?