JS关于var声明变量的一个坑

在JS中声明变量有两种,一种是带var,一种是不带var。

两者区别是不带var的变量声明为全局变量,带var则是局部变量,当然也可以在最外围声明var 也是属于全局变量。

这里说的一个坑是在一个循环的场景里。

for(var i=0;i<10;i++){
	console.log(i);
}
for(var j=0;j<10;j++){
	var i;
	console.log(i);
}

以上代码是例子,我所想要的效果是每次循环后 i都是一个初始值,即刚刚声明的状态。

但实际效果是第二次循环所得的i都会是第一个循环最后的结果10。

原来是写java的,根本没想过会有这种问题,原因应该在js中var声明不会赋默认值,而是开辟一段存储空间,当赋值后,这个存储空间就存了这个值,然后循环回来再次声明时会自动找到这块内存。

js在声明变量时最好附上默认值,以上代码如果是没有第一次循环变量i的声明,i会直接报undefined,这也是我遇到坑的原因,因为这样没有报错,但值是错的。

但经过修改后这样就可以实现

for(var i=0;i<10;i++){
	console.log(i);
}
for(var j=0;j<10;j++){
	var i= 0;
	console.log(i);
}

 

你可能感兴趣的:(js)