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

mac2025-04-24  12

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

 

最新回复(0)