var a = 1;
function f1(){
console.log(a);
//如果不注释,内部变量会覆盖外层变量,输出为undefined
// if(false){
// var a = 2;
// }
}
f1();
let b=1;
function f2(){
console.log(b);
//因为let,块级作用域,不影响外面的b
if(false){
let b=2;
}
}
f2();
for(var i=0;i<5;i++){
console.log(i);
}
//输出为5,这时候i变成全局变量了
console.log(i);
//es5使用闭包实现块级作用域
for(var i=0;i<5;i++){
//不使用闭包,全部都是5
setTimeout(() => {
console.log(i)
}, 0)
//使用闭包,输出正确
;(function (index){
console.log(index);
})(i);
}