js变量作用域--变量提升

   js的变量和其他语言的变量作用域,有很多相同的地方,但也有很多不相同的地方。尤其是变量提升这个概念。之前还真没听说过这个概念。

   先看具体的例子:

	function test2(){	
		 alert(t);		 
		 var t="123"
		alert(t);
	 }
按照之前的理解,第一个alert就应该出错。可是在谷歌浏览器已测试,没有错误。第一次弹出来的是undefined!!第二次是123,和一般语言里是一样的。

没有错误,说明t这个变量已经定义,那是不是全局变量呢? 

	function test(){	
		 alert(t);		 
		 var t="123"
		alert(t);
		testGlobel();
	 }
	  function testGlobel(){
	   alert(t);
	 }
前两次和之前的一样,最后一次Uncaught ReferenceError: t is not defined,显然不是全局变量。

 其实这就是变量提升,我的理解是,在函数中使用的任何局部变量,编译器都会把这些变量放在函数的入口处定义,但赋值还是和编写代码时是一样的,也就是说,局部变量的定义其实是在函数入口处,和我们实际编写代码的位置没有关系。赋值才真正的和我们编写代码的位置有关系。

例如上边的代码可以改写成:

	function test(){
         var t	;
		 alert(t);		 
		  t="123"
		alert(t);
		testGlobel();
	 }

测试最常用的循环计数器和上边的结果是一样的,第一次是undefined!第二次是3是循环后的值,第三次是Uncaught  ReferenceError: i is not defined,显然不是全局变量。


function test(){	
		 alert(i);
		 var arr=[4,2,6];
		 for(var i=0;i<arr.length;i++)
		 {
		 
		 }
		  alert(i);
		  testGlobel();
	 }
	  function testGlobel(){
	   alert(i);
	 }


这个或许才是和其他语言变量作用域的最大区别吧。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值