js的全局变量和局部变量

一:

<script>

var a ="1";

function test(){
var a;
alert(a);
var a="2";
alert(a);
}
test();//undefined ; 2
alert(a);//1

var a ="3";

</script>

<script>

function test(){
alert(a);
var a="4";
alert(a);
}
test();//undefined ;4

alert(a);//3

</script>

注意:全局变量跟局部变量重名时,局部变量的scope会覆盖掉全局变量的scope,当离开局部变量的scope后,又重回全局变量的scope

二:javascript的变量的scope是根据方法块来划分的(也就是以function的一对大括号{}来划分)。切记是function块,而for if while不是作用域划分标准。


<script>

function test2(){
alert("before for scope:"+i);//如果test2方法里,后面代码中没有对i进行复制或声明,则会报错,提示i,没有声明
for (var i = 0; i <3; i++) {
var j=0;
alert("in for scope:"+i);//i的值是0,1,2
}
alert("after for scope:"+i);//i的值为3,注意此时虽然在for scope以外,但i的值还是经过了i++,所以为3
alert("j="+j);//在if for while等内定义的值,在if for while之外还是能获取到。
}
test2();
alert(i);

</script>

注意:JavaScript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定变量的作用域(如果一个函数中没有定义i,则肯定报错;如果在函数里,先alert(i),但是在后面声明的,则i会是undefined)


三:window.a会是全局变量,不会随同名的局部变量的变化而变化

[javascript]  view plain  copy
  1. <script>  
  2.     var a =1;  
  3.     function test(){     
  4.         alert(window.a);  //a为1,这里的a是全局变量哦!  
  5.         var a=2;     //局部变量a在这行定义  
  6.         alert(a);  //a为2,这里的a是局部变量哦!  
  7.     }  
  8.     test();  
  9.     alert(a); //a为1,这里并不在function scope内,a的值为全局变量的值  
  10. </script>  

四:


[javascript]  view plain  copy
  1. <script>  
  2.     var a =1;  
  3.     function test(){  
  4.         alert(a); //a为undefined! 这个a并不是全局变量,这是因为在function scope里已经声明了(函数体倒数第4行)一个重名的局部变量,  
  5.                      //所以全局变量a被覆盖了,这说明了Javascript在执行前会对整个脚本文件的定义部分做完整分析,所以在函数test()执行前,  
  6.                      //函数体中的变量a就被指向内部的局部变量.而不是指向外部的全局变量. 但这时a只有声明,还没赋值,所以输出undefined。  
  7.         a=4         
  8.         alert(a);  //a为4,没悬念了吧? 这里的a还是局部变量哦!  
  9.         var a;     //局部变量a在这行声明  
  10.         alert(a);  //a还是为4,这是因为之前已把4赋给a了  
  11.     }  
  12.     test();  
  13.     alert(a); //a为1,这里并不在function scope内,a的值为全局变量的值  
  14. </script>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值