var a = 10; function a() { alert(a); } function b() { var a = 20; a(); } b();
JS没有块级作用域(可以闭包实现),只有函数作用域,函数可以访问外部的变量,函数里面的变量外面找不到。
在javascript中代码执行顺序,函数跟变量是预先解释(置顶解析),所以我们直接看第9行代码;此时首先到函数b(),此时函数内部有声明局部变量a,然后执行函数a();这时,函数a()弹出a的值,然而此时函数内部是没有a变量的定义,所以访问全局变量a,结果是弹出10;