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="测试" οnclick="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>
还没有评论,来说两句吧...