开发者社区> 问答> 正文

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 528 0
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
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载