在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);
}