var repeat = "moveElement('" + elementID + "'," + final_x + "," + final_y + "," + interval + ")";
movement = setTimeout(repeat, interval);
將 elementID 的值作為**字符串字面量**傳遞給 moveElement。假設 elementID = "myDiv":
moveElement('myDiv', 100, 200, 50),函數接收字符串 "myDiv",內部通常用 document.getElementById(id) 查找元素。moveElement(myDiv, 100, 200, 50),JS 引擎將 myDiv 視為**變量名**,要求全局作用域存在 var myDiv = ... 或元素 id="myDiv" 自動映射為全局變量(非標準、不可靠)。setTimeout 接收字符串等同 eval,效率低、難調試、易注入(含引號需轉義)。movement = setTimeout(() => {
moveElement(elementID, final_x, final_y, interval);
}, interval);
優勢:直接捕獲變量作用域,無拼接、無轉義、可斷點調試、性能更好。
elementID.replace(/'/g, "\\'")。現代 JS 開發**堅決不用字符串版 setTimeout/setInterval**,改用函數引用形式。