下面这段代码输出结果是? 为什么?
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);