JS中函数的词法作用域
在javascript中,每一个函数都拥有自己的词法作用域。简单理解就是,每个函数在被定义(注意不是调用!)时,都会创建一个属于自己的环境(作用域)。
比如,
function foo(){ var a = 1;
foo2(); } function foo2(){ console.log(a); }
fon();
运行结果:
ReferenceError: fon is not defined.
因为,函数foo2在被定义时,它可以访问的环境只有全局作用域和它自己的函数作用域,并不能访问到函数foo中的变量a。
当调用函数foo时,会执行foo2,此时的foo2会在它的自发作用域中找a,由于并不能找到变量a,所以系统就会报错了。