1. 程式人生 > >關於對var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";的解釋

關於對var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";的解釋

看javaScript Dom 程式設計藝術一直有這個問題不明白今天終於搞懂了一嘟嘟

var repeat = moveElement(elementID,final_x,final_y,interval);///你這樣寫也是錯誤的,repeat得到的是moveElement的返回值,沒有reutrn那麼預設就是undefined,那麼下面的計時器就沒意義了

1.計時器第一個引數儘量不要用字串,而是匿名函式(需要傳入引數)或者直接要執行的函式名稱(對於不需要引數的),字串是用eval執行的,存在xss漏洞並且效率低

2.setTimeout第一個引數如果是字串,那麼如果你傳遞的是變數,就是
var repeat = "moveElement(elementID,final_x,final_y,interval)你這種形式,那麼變數必須要是window作用域下的(雖然eval執行,但是需要變數是wiindow作用域下的,這個和eval有區別,是當前作用域內的變數可以訪問到),訪問不到此時傳入的引數,會報錯

 

 

function aa(v) {
		
        eval('alert(v)')//1
		//v=2;//如果有就會每過2s輸出2;
        setTimeout("aa("+v+")", 2000)//2s後執行aa(v)報錯,v is not defined
    }

    aa(1);

var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";

"+value+"為傳遞變數如果沒有++就是傳遞字串了,兩個加號之間的變數可以解析,由於elementID是字串,必須要要變為引號括起

這樣串接起來就是變為傳遞當前引數的值,由於elementID是字串,必須要要變為引號括起

1)var repeat = "moveElement(elementID,final_x,final_y,interval)“
var repeat = "moveElement('"+elementID+"',"+final_x+","+final_y+","+interval+")";
這2中其實都是相當於執行下面的js程式碼

1)"moveElement(elementID,final_x,final_y,interval)"
2)moveElement('elementID的值', final_x的值,final_y的值, interval的值)

所以為什麼第一個是傳遞變數,第二個需要注意字串類,非數字布林變數需要引號括起

看的一位大佬的還有一點沒看明白先留下網址https://ask.csdn.net/questions/367104