开发者社区 问答 正文

var a = 6; setTimeout(function() { var a = 666;

var a = 6; setTimeout(function() { var a = 666; alert(a); // 输出666, }, 1000); a = 66;

展开
收起
kun坤 2019-11-28 14:23:51 557 分享 版权
1 条回答
写回答
取消 提交回答
  • var a = 6;
    setTimeout(function() {
      var a = 666;
      alert(a); // 输出666,
    }, 1000);
    a = 66;
    
    因为 var a = 666;定义了局部变量 a,并且赋值为 666,根据变量作用域链, 全局变量处在作用域末端,优先访问了局部变量,从而覆盖了全局变量 。
    
    var a = 6;
    setTimeout(function() {
      alert(a); // 输出undefined
      var a = 666;
    }, 1000);
    a = 66;
    
    因为 var a = 666;定义了局部变量 a,同样覆盖了全局变量,但是在 alert(a);之前 a 并未赋值,所以输出 undefined。
    
    var a = 6;
    setTimeout(function() {
      alert(a);
      var a = 66;
    }, 1000);
    a = 666;
    alert(a);
    // 666, undefined;
    
    记住: 异步处理,一切 OK 声明提前
    
    
    2019-11-28 14:24:00
    赞同 展开评论
问答地址: