```
var x = 2;
// var y;
if(x < 1){
y = x;
}else if(x >= 1 && x < 10){
y = 2*x + 1;
}else{
y = 5 * x - 17;
}
alert(y);
```这段代码中我专门把变量y注释了,但是后台为什么没有报错,最后还是能够得出y的结果?
var x = 2;
// var y;
if(x < 1){
y = x;
}else if(x >= 1 && x < 10){
y = 2*x + 1;
}else{
y = 5 * x - 17;
}
前提
js 你用 var 声明变量是一种方式
另一种 是 直接一个 变量 y js会默认把 y挂在window 下面
你的 y在左边 他是被赋值的
if(x < 1){
y = x; 所以你创建 y 放到window下面 x的值赋值给y 当然不报错了
}
但是如果你换种方式
if(x < 1){
x=y; // 把y值给x 此时就会报错 因为y没有声名 是找不到的 就会报
}
js的变量不强制声明的,这叫隐式声明,这时候的y将提升到全局(浏览器下是window)变量下的属性,这就是变量提升了。
js不声明,它会补上。js还可以变量提升。就是你先用再声明
y=6
console.log(y);
var y;
变量提升
非严格模式,未声明的变量上升为global和window