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

根据变量定义的范围不同,变量有全局变量和局部变量之分。
那什么是全局变量和局部变量呢?
全局变量:在全局范围不管是否使用var定义的变量和不管在什么范围不使用var定义的都是全局变量。
局部变量:在函数里定义的变量(当然在函数里不使用var定义的是全局变量)。
那关于变量的作用域问题,会有下面几种情况:
第一,

var i = "123";
 function a(){
	 var i = "1";
	 alert(i);
 }
 name();

执行结果为1,因为全局变量和局部变量相同变量名时,局部会覆盖全局,也就是说局部变量优先级更高。
第二,

function a(){
	 var i = 1;
 }
 a();
 function b(){
	 alert(i);
 }
 b();

在这里插入图片描述
结果会说i 是没有定义的,因为i是局部变量,外部不能调用。
第三,

function a(){
	  i = 1;
 }
 
 function b(){
	 alert(i);
 }
 b();

结果和第二是一样的,因为i是全局变量—但是必须等到定义该变量的函数执行之后。
第四,

var i = "123";
 function a(){
      alert(i);
	  i = 1;
	  alert(i);
 }
 a();

结果会先显示123,再显示 1 ,函数是按顺序执行的,全局变量一定要在调用之前声明
第四

var i = "123";
 function a(){
      alert(i);
	  var i = 1;
	  alert(i);
 }
 a();

这个时候,结果会显示undefined和1,因为现在函数内的是局部变量,而重名的时候,局部变量优先级高于全局变量,但是在函数内有一个变量提升的机制,会把该变量的声明部分提升到函数顶部,而提升到顶部的这个变量就是undefined类型,再按顺序执行。
第五

for(var i=0; i<5; i++){
    function a(){
	    console.log(i);
		}
	}
	console.log(i);
	a();

有循环的时候,函数在循环体内,i的作用范围相当于全局的,两个都会打印出5
第六

function a(){
	for(var i=0; i<5; i++){
		console.log(i);
		}
		alert(i);
	}
	a();

结果如下:
在这里插入图片描述
这个时候,循环在函数内,而i的作用范围是整个函数内,而不是循环体内,因为JavaScript没有代码块的范围。如果出了函数在打印就会报错。
就是下面这样:

function a(){
	for(var i=0; i<5; i++){
		console.log(i);
		}
	}
	alert(i);
	a();

在这里插入图片描述
好啦,就写到这里,我已经明白啦,你们呢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值