在javascript中,全部变量与局部变量是新手们最容易接触到的问题,今天就来讲一下全局变量与局部变量的差异:
先来说一下闭包这个概念,闭包是指子函数使用父函数的局部变量,即function使用了function本身之外的函数。
全局变量可理解为在函数外声明,但在函数中调用依然可以获得,即
<script type="text/javascript">
var a = 'z';
function test(){
alert(a);
}
test();
</script>
局部变量可理解为在某函数内声明,且只能在声明的那个函数中使用,即
<script type="text/javascript">
var a = 'z';
function test(){
var a = 'x';
alert(a);
}
test();
alert(a);
</script>
可见,在函数中声明局部变量只会影响函数内的变量,并不会影响到外面的全局变量,即使他们变量名相同。
那么我们来做一道题,代码如下
<script type="text/javascript">
var a = 'z';
function test(){
var a;
alert(a);
a = 'x';
alert(a);
}
test();
alert(a);
</script>
此题运行结果为 undefined、x和z ,因为在函数中再次声明了a,但没有赋值,故第一次结果为undefined ,接下来a='x',第二次结果就为x,第三次alert(a)中的a为全局变量的a,故结果为z。再次证明局部变量不会影响全局变量。
然而我在浏览别人的文章时发现下面这段代码,然而这段代码和上面所说并不相同
<script type="text/javascript">
var a =1;
function test(){
alert(a);
var a = 2;
alert(a);
}
test();
alert(a);
</script>
此题根据以上思路,根据顺序结构,先弹出 1 ,其次弹出 2 ,最后弹出 1,然后运行代码后发现,结果为undefined,2,1。
这是我觉得奇怪的一点,至于为什么可去@zyz511919766的博客看
http://blog.csdn.net/zyz511919766/article/details/7276089 此为链接
谢谢观看