js为变量赋值时(将b赋给a),首先在其作用域中搜索,看b是在当前语句之前还是之后定义。若是之前定义,则进行正常赋值。若是之后定义,则a为undefined(即使全局中有名叫b的变量)。若没有b的定义则沿作用域链上溯。
var b=1;
function(){
var a=b; //a=1;
}
var b=1;
function(){
var a=b; //undefined;
b=1;
}
function(){
var a=b; //错误
}
1.检查当前变量对象有无该变量。
2.若有,检查在左值之前还是之后,之前正常赋值,之后undefined。若无,沿作用域链上溯寻找上游变量对象。若最终未找到则error。 |
|