2009
09.03
09.03
一个有关于变量作用域的函数
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
参考:
- Javascript作用域浅析
- 注意细节:Javascript中的变量作用域
- JavaScript中的作用域–这里的解决方法理解的不是很明白
- 关于作用域的问题都是看了Javascript 优化计划(程序优化篇)
暂无回复
添加回复