avascript作用域其实是有一个简单的静态作用域规则来决定的。可以把这个规则想象成这样:
当查找一个变量引用时,该变量先在父对象里找。如果没有找到,就不断地重复这个过程,递归地
去父对象里查找,一直到全局变量的定义那层。如果最后还是没有找到,就针对该变量生成一个引用
错误。这样的作用域行为与大多数流行语言(Java、C#)中的变量处理方式大不相同。对于有Java
C#背景的人,需要提醒一下,Javascript没有实现块作用域(block scoping)。
for(var i=0; i<10; i++){
for(var i=0; i<2; i++){
console.log(i);
}
}
对于上面这段代码,你可能觉得它会打印20个数字,其实在javascript里,这段代码会陷入到无限循环。
因为javascript没有实现块级别的作用域,所以里面那层循环的i会跟外面那层循环的i是同一个变量。于是
里面的循环改变了i的值,导致外面的循环永远不会结束。
for i in range(5):
for i in range(2):
print i
上面的代码将输出5个数字0和1 ,i变量只在本地循环内起作用。
网友评论