js不同于c、c++、java等语言的块级作用域(以大括号为界{}的作用域),是以函数作为作用域的。
下面一个例子:
java:
int i =100;
for(int i = 0;i<10;i++){}
System.out.printf(i);//输出i=100
在js中:
var i =100;
for(var i =0;i<10;i++){}
console.log(i);//在控制台输出i=10
这里首先要说明的是for循环不是一个函数,这不论在java还是js中都是成立的。
再者在java中是以{}为界划分作用域的,所以在for循环中的i是局部变量。
而在js中,for循环不是函数,所以它内部声明的变量是全局变量,在for循环之前定义并赋值了i。在for循环中重新声明了i,按照js变量声明的方式,当再次声明一个变量时,原变量的类型被屏蔽,以现在声明的为准,如果重新声明没有值,就把原来的值存入。