今天做了个测试
var b=new Date().getTime();
for(var i =0;i<1000000;i++)
{
var a=1;
}
var c=new Date().getTime();
alert(c-b)
------------------------------------
var b=new Date().getTime,
a;
for(var i =0;i<1000000;i++)
{
a=1;
}
var c=new Date().getTime();
alert(c-b)
两段代码的时间是一样的, var在for里更稳定些。
上边的对资源的释放是否有影响呢?
两段代码对资源的释放都没有问题。
第一段是在迭代中声明,赋值,也就是每次都给a从新分配内存,但上一次被定义的a已经被销毁,内存已经被释放,所以不存在资源释放问题。
第二段是声明a为全局变量,也就是a在第一次被分配了内存空间,然后的每次迭代都从新赋值,最终的结果页只是内存中有一个a变量,一样不存在资源释放问题。
上面是定义一个局部变量在for里,自然在for外面是无法使用的,js可以优化掉
下面是定义了一个全局变量,自然每次都会被重新赋值,
var 在for 里面,除了for循环,var a =1的a资源被释放的。
局部变量与全局变量,这里跟JAVA差不多,
[code="java"]
var b=new Date().getTime();
for(var i =0;i<1000000;i++)
{
var a=1;
}
var c=new Date().getTime();
alert(c-b)
[/code]
从它们相同时间来说,对资源释放没有影响。而且这种写法,对使用资源比较少。就像lovewhzlq说的一样。
在JAVA里面,第二种写法容易出现内存溢出的问题。而第一种不会出现。
加与不加var的区别在:
[quote]
当你在当前上下文内进行这种“隐式”声明时,JavaScript引擎会先在当前上下文中寻找是否之前有声明此变量,如果没有,再到上一级的上下文中去寻找,如果一直未找到,会最后在window上声明这个变量![/quote]
[quote] 当上下文中的任意一层有这种“隐式”定义的变量时,那么该层的该变量会被修改,而不会在window上生成一个新的变量。[/quote]
如果在for中使用a=1 则跟情况2一样了。