首页 > 代码库 > 对setTimeout()第一个参数是字串的深入理解以及eval函数的理解
对setTimeout()第一个参数是字串的深入理解以及eval函数的理解
1 <script language="javascript" type="text/javascript"> 2 var a=1;3 setTimeout(‘var a=2;alert(a)‘, 1000);4 alert(a);5 setTimeout(‘alert(a)‘,1000);6 </script>
//1 2 1;
setTimeout的异步我这里就不做过多的解释(异步回调加入事件队列相关知识),主要写一下对一个参数是字串的时候注意的地方
从上面的代码中我们可以看出来,setTimeout的第一个参数为字串的时候,其实它相当于new 了一个Function在Function里面去定义的a变量,相当于:
1 <script language="javascript" type="text/javascript"> 2 var a=1;3 setTimeout(function(){var a=2;alert(a);}, 1000);4 alert(a);5 setTimeout(function(){alert(a);},1000);6 </script>7 //1 2 1;
1 <script language="javascript" type="text/javascript"> 2 var a=1;3 new Function(‘var a=2;alert(a);‘);4 alert(a);5 new Function(‘alert(a);‘);6 </script>7 //1 2 1;
但是对于eval函数来说就不是这样的了
1 <script language="javascript" type="text/javascript"> 2 var a=1;3 eval(‘var a=2;alert(a)‘);4 alert(a);5 setTimeout(‘alert(a)‘,1000);6 </script>
//2 2 2;
eval函数会把里面的字串直接定义到全局,不会向setTimeout和new Function那样会在一个闭包函数中去定义,所以eval函数不但会出现xss攻击的危险,还会存在全局变量污染的问题,所以我们要尽量减少多eval的使用,当有时候万不得已不需用到的时候,我们用new Function去代替eval也是可行的
对setTimeout()第一个参数是字串的深入理解以及eval函数的理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。