1.允许重复声明,导致变量被覆盖。看如下代码:
var a = 1;
function prinf(){
console.log(a);
}
var a = 2;
prinf();
结果输出:
这里假设你var a = 2前面还有上万行代码,那么你调用prinf函数的时候,是想打印之前的a,但是你忘记之前声明的变量和几万行代码后面的a是同名的,导致后面声明的a覆盖了之前的a.
2.变量提升:闭包问题,怪异的数据访问.
看如下代码:
if(Math.random() > 0.5){
var a = "abc";
console.log(a);
}else{
console.log(a);
}
console.log(a);
输出结果:
由于变量提升问题,这段代码是不会报错的,但是逻辑是有问题的。
闭包问题:看如下代码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">