关于对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

猜你喜欢

转载自blog.csdn.net/qq_39148344/article/details/83350911