zoukankan      html  css  js  c++  java
  • 警惕作用域陷阱(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

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

  • 相关阅读:
    关于C#登录三层
    SQL 语句关于分页的写法
    C# 如何去掉button按钮的边框线
    20151220
    继承
    对象的旅行
    多态
    封装
    OO大原则
    javascript
  • 原文地址:https://www.cnblogs.com/jiajiaobj/p/2336276.html
Copyright © 2011-2022 走看看