一段简单的代码引出的问题:
function test1()
{
for (i=0;i<3 br="" i=""> {
print("test1:"+i);
}
}
function test2()
{
for (i=0;i<3 br="" i=""> {
print("test2:"+i);
test1();
}
}
test2();
得到结果,出乎人的意料:3>3>
test2:0
test1:0
test1:1
test1:2
修改函数test1 如下:
function test1()
{
for (var i=0;i<3 br="" i=""> {
print("test1:"+i);
}
}3>
得到结果,符合预期:
test2:0
test1:0
test1:1
test1:2
test2:1
test1:0
test1:1
test1:2
test2:2
test1:0
test1:1
test1:2
这是因为Javascript的变量范围 scope是函数级别的,并没有其他语言级别的local概念。
所以为了避免递归或者嵌套查询问题,最好在变脸名前宣布var,或者使用Ecmascript 1.7
里的let关键词来避免这种情况。