js问题,为什么我没有设置变量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;
}
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