有一道JS题目,代码如下:
var loacl = "out";
function test(){
alert(loacl);
var loacl = "inner";
}
test();
问题是alert会输出什么?
也许大多人第一眼看到那都会认为alert输出的是“out”,但是当把程序运行起来,发现输出的是“undefined”!很吃惊吗?为什么会输出“undefined”呢!
这道题目考察的JS的作用域的问题,
在JS中,没有块级作用域!
这句话是什么意思呢?意思就是在JS中,函数所声明的变量,无论在什么地方声明,在整个程序中它们都是有定义的!、
所以由于这个作用域的限制,输出的并不是“out”,局部变量在整个函数体内都是有定义的,而局部变量隐藏了同名的全局变量!虽然局部变量在整个函数体内都有定义,但是没有执行到var语句之前,局部变量并没有初始化,所以,test函数相当于下面这样:
function test(){
var loacl;
alert(loacl);
loacl = "inner";
}
这道题目告诉我们,在JS中,把变量声明都集中在函数开头是个好的编程习惯,不然的话,可能会让你大吃一惊!