var i = 5; var i; alert(i);
当一个变量被声明赋值之后,如果再对其声明,则不会改变上一次赋值后的值,所以i的值还是5,只有重新赋值之后,才会改变,如:
var i = 5; var i = 6; alert(i);
i现在的值是6;
JS中没有块级作用域,如果想要块级作用域的效果,可以进行模仿,如:
(function () { for (var i = 0; i < 5; i++) { } })(); alert(i); //出错
这方法可以理解为把块级作用域放在一个匿名函数中,所以匿名函数中声明的变量,在其函数执行结束之后,也就自动进行清理了。另外,这种做法也可以减少闭包占用的内存问题,因为没有执行匿名函数的引用。