警惕作用域陷阱(setTimeout,eval,Function)

不知道该怎么命名这个题目。暂时先这么着吧,先看下边测试。

=====setTimeout================================>>>>>>
第一种:
var x = "w.x";
function a(){
  var x = "a.x";
  setTimeout("alert(x)");
}
a();  //-->"w.x"

第二种:
var x = "w.x";
function a(){
  var x = "a.x";
  setTimeout(function(){alert(x)});
}
a();  //-->"a.x"

 

=====eval================================>>>>>>
第一种:
var x = "w.x";
function a(){
  var x = "a.x";
      eval("alert(x)");
}
a();  //--> a.x

第二种:
var x = "w.x";
function a(){
  var x = "a.x";
      window.eval("alert(x)");
}
a();  //--> w.x

 

 

 

 

=====function================================>>>>>>
第一种:
var x = "w.x";
function a(){
  var x = "a.x";
      function b(){
    alert(x);  
  }
  b();
}
a();  //--> a.x

第二种:
var x = "w.x";
function a(){
  var x = "a.x";
  var b = Function("alert(x)");
}
a();  //--> w.x

 

暂时说不出个所以然来,先把他记录下来。

posted @ 2012-02-02 21:59  潴哥  阅读(500)  评论(0)    收藏  举报