作用域

下面这段代码输出结果是? 为什么?

var a = 1;
setTimeout(function(){
    a = 2;
    console.log(a);  // 最后输出 结果为: 2;
}, 0);
var a ;
console.log(a);  // 首先输出 结果为:1;
a = 3;
console.log(a); // 其次输出 结果为:3 ;

输出顺序:首先在setTimeout中的console.log() 需要在所有的js代码执行完毕之后再执行里面的函数所以是最后输出,不在setTimeout中的console.log() 按照顺序输出;
输出结果:按照输出顺序来说因为存在变量提升先把所有的a提升到顶部后赋值,所以首先输出的结果为: 1;然后赋值 a = 3;其次的输出结果就是:3;再看setTimeout中的函数作用域 a 虽然是全局变量也是离函数中 console.log最近的a ;所以输出结果为:2;

可以理解为下面代码:

var a;
var a;
a=1;
console.log(a); 
a = 3;
console.log(a);
setTimeout(function(){
    a = 2;
    console.log(a);  // 最后输出 结果为: 2;
}, 0);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 12,378评论 2 17
  • 1.函数声明和函数表达式有什么区别 (*) 区别: 函数声明后面的分号可加可不加,不加也不影响接下来语句的执行,但...
    Sheldon_Yee阅读 3,077评论 0 1
  • 1. 函数声明和函数表达式有什么区别 使用function关键字声明一个函数时,声明不必放到调用的前面。//函数声...
    _李祺阅读 1,943评论 0 0
  • 连续一周每天抽出一点时间看完了曾经荣获《雨果奖》的漫画,《守望者》。阿兰摩尔的笔触在这类深刻探讨人性的题材上发挥得...
    均乐阅读 2,939评论 0 0
  • 不是很明白为什么做HR的帮认识的人找工作好像是天经地义,凭什么呢
    chancy要瘦阅读 2,571评论 0 0