var a = 6; setTimeout(function() { var a = 666; alert(a); // 输出666, }, 1000); a = 66;
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 声明提前
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。