码迷,mamicode.com
首页 > 其他好文 > 详细

对setTimeout()第一个参数是字串的深入理解以及eval函数的理解

时间:2014-10-29 16:39:08      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   使用   java   sp   div   

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函数的理解

标签:style   blog   io   color   ar   使用   java   sp   div   

原文地址:http://www.cnblogs.com/cdwp8/p/4059440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!