javascript 作用域链生成顺序
最近看到的,理清一些思路。
javascript作用域链有时候会导致一些奇怪的问题,作为弱类型的javascript,函数也是对象,变量的作用域是函数体内有效,无块作用域。
javascript在寻找变量或对象时,先从函数体内部上下文寻找,其次寻找函数的外部上下文。
而javascript在构建作用域时,是词法作用域,并非执行时。参考abruzzi的例子:
var str = "global"; function scopeTest(){ print(str); var str = "local"; print(str); } scopeTest();
结果为:
undefined
local
解析器并没有调用javascript外部的str,在语法分析后,构造作用域,此时scopeTest()函数中的str在整个函数中初始化,并没有赋值,所以第一句执行print输出undefined
进行小修改,将scopeTest中的str定义为全局变量,所得结果就容易理解了。
var str = "global";
function scopeTest(){
print(str);
str = "local";//str为全局变量。
print(str);
}
scopeTest();
此时结果是
global
local
其实,就是全局变量和局部变量的作用域的作用关系,javascript无块作用域,影响了局部变量的作用范围,从而导致一些特别的情况。
不知道理解是否合理,请各位指教。
很多不合理的地方,这边的解析感觉更合理点我,12楼的回复