我一直有一個地方不是很理解,這次看到一段程式碼很能說明問題:
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
四個是傳入的參數,除了第一個是字串,後面三個都是數字。
我第一個不能理解的地方是這些參數為什麼要加引號,第二個不能理解的是這裡的加號有什麼作用麼。還有一個問題是像elementID
這個字串,為什麼包了兩層引號,在什麼情況下需要這麼做?
加號一般我認為適用於字串拼接,但在這裡顯然不是這樣,一對引號就是一個獨立的空間,加號包裹在這裡面有什麼意義麼。
1.引號包住的是逗號
2.123456+"somestring"→"123456somestring"
3.elementId是String型參數所以加引號
變數最後轉為字串啊!數字+引號 變字元穿 如果你需要的參數是字串而不是數字
這裡的字串在setTimeout裡相當於eval的用法,是指你想要在delay毫秒之後執行的程式碼字串
首先,這裡的加號的確是用來字串拼接
的結果就是
只是,將這個名叫repeat的字串變數作為參數傳給了setTimeout, 即在interval毫秒後,執行repeat
這裡其實基本上等同於
這樣應該比較好理解吧?
但是這兩種方式還是有區別,一般不大推薦題主說的這種方式,具體可見window.setTimeout、Running string as function in javascript setTimeout?