2009
09.03

JavaScript中的作用域

一个有关于变量作用域的函数

var v = "aaa";
function func() {
   alert(v);
   var v = 'bbb';
}

结果为:undefined,解释为:alert的时候函数的内部变量v已经定义了,并且覆盖掉了同名的全局变量的定义,只是还没有初始化,所以alert出来的是“undefined”

但是我看了还是觉得有些说不通,于是看到了Javascript作用域浅析上面的解释:作用域内的变量不管在函数的哪里声明,JavaScript都会在函数运行前在作用域内包含该变量

如果把 var v = ‘bbb’; 前面的 var去掉又会出现另外一种结果:

var v = "aaa";
function func() {
   alert(v);
   v = 'bbb';
}
func();

在我的理解,v = ‘bbb’其实是函数赋值,var v 则是重新定义了变量v,结果alert出来的是aaa

再变下:

var v = "aaa";
function func() {
   v = 'bbb';
   alert(v); 
}
func();

解释很明确,在函数里更改了变量的赋值,结果为bbb

参考:

暂无回复

添加回复