??如上图所示,“当javascript代码需要查询变量x的值时(一个称为变量名解析的过程),它就开始查看该链的第一个对象。如果那个对象有一个名为x的属性,那么就采用那个属性的值。如果第一个对象没有名为x的属性,javascript就会继续查询链中的第二个对象。如果第二个对象仍然没有名为x的属性。那么就继续查询下一个对象,以此类推。”假如有这么一个:
<script>var x =3;//这个全局变量xfunction a(){var x =1;//这是函数a内的变量x
document.write("a:"+x); //这个显示函数a内的变量值
function b(){
var x = 2;//这是函数b内的变量x
document.write("b:"+x);//这个显示函数b内的变量值
}
b();
}
a();
document.write("w:"+x); //这个显示全局变量x的值
</script>结果显示为a:1b:2w:3
但和那段话“。如果那个对象有一个名为x的属性,那么就采用那个属性的值。如果第一个对象没有名为x的属性,javascript就会继续查询链中的第二个对象。如果第二个对象仍然没有名为x的属性。那么就继续查询下一个对象,以此类推。” 好像矛盾了。因为在函数b内的var x=2;已经找到了名为x的属性,依据这个图 来看的话,很显然根据流程图可知,要是“在此定义”的话就直接获得该值, 以后的全局变量和外层函数a内所定义的x就该忽略了,但结果却依然把各个作用域的值都显示了,难道那段话就是错误的么?还是自己理解上的问题了。
关键是这个图
这个图的流程图就判断分支,一旦选择 是 的话后面的就不执行了,但在嵌套函数中的执行结果来看其他的还是执行了,好像这个图的解释是错误的??
请大家帮着看看,谢谢了
var x = 2;
document.write( "b: "+x);//x在此定义了,直接获取该值
}function a(){
var x =1;
document.write( "a: "+x);//x在此定义了,直接获取该值
//....
}var x =3;
document.write( "w: "+x);//x在此定义了,直接获取该值
<script>var x =3;//这个全局变量xfunction a(){var x =1;//这是函数a内的变量x
document.write( "a: "+x); //这个显示函数a内的变量值
function b(){
var x = 2;//这是函数b内的变量x
document.write( "b: "+x);//这个显示函数b内的变量值
}
b();
}
a();
document.write( "w: "+x); //这个显示全局变量x的值
</script> 它的顺序应该是:b();
a();
global