var a=3;
function kk(){
console.log(a)
}
var a=2;
kk();//打印值为2
初学js,上面的代码我以前理解没问题,后来看了词法作用域后我就不能理解了。
我对词法作用域的理解是,你在编写代码的时候,作用域就定好了。
用上面代码解释我的想法:
执行kk()的时候,先查询kk自己局部变量有没有a值,没有的时候在全局变量里找;
这时以我对词法作用域理解,查找a全局变量的时候,只能**声明kk函数以上的地方找**,所以值应该是3。而**不应该在kk()调用位置**以上找,但是结果确实在调用位置上查询到a的变量为2。
是我对词法作用域的理解有偏差吗