JS面试题:变量声明的提升,javascript的变量声明提升

变量声明(定义变量)提升:

       在预编译阶段,编译器会把所有定义的变量全部提升到最顶部,即,把变量声明的语句会自动放置到开始。换句话说,经过预编译后,在任何函数里,一开始是全部的变量声明。

//示例一:
/*
function func1(){
	alert(v1);
	var v1;
}

//等价于(即预编译后):
function func1(){
	var v1;
	alert(v1);
}
*/

//示例二:
/*
function func1(){
	alert(v1);//弹出undefined,因为,只做声明的提升,不做赋值的提升
	var v1=5;
}

//等价于(即预编译后):
function func1(){
	var v1;//声明提升了,但是赋值没有提升
	alert(v1);
	v1=5;
}
*/
/*
//示例三:
function func1(){
	alert(i);//弹出 undefined,因为,只做声明的提升,不做赋值的提升
	alert(j);//弹出 undefined,因为,只做声明的提升,不做赋值的提升
	for(var i=0;i<10;i++){
		for(var j=0;j<10;j++){
			
		}		
	}
}

//等价于:

function func1(){
	var i;
	var j;
	alert(i);
	alert(j);
	for(i=0;i<10;i++){
		for(j=0;j<10;j++){
			
		}		
	}
}
*/

如果有全局变量,并且全局变量和局部变量重名

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
	<input type="button" value="测试" onclick="func1()" /><br/>
</body>
</html>
<script type="text/javascript">

//示例一:
var v1=200;
function func1(){
	alert(v1);//弹出undefined;
	var v1=300;
}

//等价于(预编译后):
var v1=200;
function func1(){
	var v1;
	alert(v1);//弹出undefined;
	v1=300;
}

</script>

猜你喜欢

转载自blog.csdn.net/jiang7701037/article/details/80188201
今日推荐