js 随手记


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带来的。他们以前的知识


中,循环之后,i自动销毁了,但是javascript中不是这样的。只要记得javascript中,函数才是划分作用域的就可以了。

 
 
原文地址:https://www.cnblogs.com/gexx/p/4243447.html