<script type="text/javascript">
function foo()
{
abc = function()
{
alert('@@@@@');
};
var abc = function()
{
alert('$$$$$$');
};
}
abc();
</script>上面代码会报错,但是当把var abc = function()
{
alert('$$$$$$');
};去掉时,会输出@@@@@。高手解释一下~局部变量会在局部作用域里屏蔽全局变量,离开局部作用域也会屏蔽吗?
js按照在文档中出现的顺序,被加载和解析(包括引用的外部js), 解析的时候, 首先对所有的变量初始化,不管他们出现的顺序, 然后回按照function声明的顺序构造function对象,(比如后面定义的同名的function会覆盖前面的definition), 构造function 的过程同样会首先初始化function的局部变量。 最后,才开始发生调用。
所以你的foo里面的abc不是全局的。完毕!
{
abc = function()
{
alert('@@@@@');
};
//首先js的代码是要经过预编译的 如果你不删这段函数 它预编
//译到这里会把abc当作局部变量(因为你是var的) 因此你在foo函数外边调用foo函数里边的abc是不行的
//如果你去掉了这段函数 那么它把abc当作全局变量 全局变量外边自然可以访问
var abc = function() {
alert('$$$$$$');
};
}
abc();