var name = 'frog'
function hello(){ alert(name); // undefined var name = 'bbc'; }
在javascript中,函数是能够造成一个独立做用域的,变量的查找,首先是就近原则,先看本身有没有,本身没有,就会自动跑到外层去找,这一点和其 它语言可能不同,它会自动跑外边去找。
在整个hello做用域内,只要定义了name这个变量,就不会去window中找,不过呢,在hello本身的 做用域内,还有一个规则,申明以前调用,都是undefined,申明且赋值以后调用才会有值。
alert(name)发生在申明以前,因此会弹出 undefined就是这么个道理。
for(var i=0;i<10;i++){ //... } alert(i)//10
这个块,指的就是两个大括号之间的区域, 在javascript中,本来是不存在这个问题的,出现这个疑问,是由那些搞过c语言之类的人转来搞javascript带来的。他们之前的知识javascript
中,循环以后,i自动销毁了,可是javascript中不是这样的。只要记得javascript中,函数才是划分做用域的就能够了。java