作用域:变量的作用范围
根据作用域不同:
- 全局变量
1) 在函数外声明的变量
2)声明变量时没有使用var - 局部变量
在函数内声明的变量(包含参数位置)
例如
<script>
var a=10;//全局变量
function show(){
console.log(a);//全局变量
var b=20;//局部变量
console.log(b);
}
show();
console.log(b);
</script>
注意:在ES5中,没有块级作用域。
变量提升:
<script>
if(true){
var a=10;//全局变量
console.log(a);
console.log(b);//undefined
}else{
var b=20;//全局变量
}
console.log('out:',a);
console.log('out:',b);
</script>
等同于如下代码:
<script>
var a,b;
if(true){
a=10;
console.log(a);
console.log(b);//undefined
}else{
b=20;
}
</script>
例题1:
<script>
function shwo(){
a=10;//升级了 全局变量
console.log(a);
}
shwo();
console.log(a);
</script>
例题2:
<script>
var a=20;
function show(){
var a,b;//变量提升
if(a==20){
// var b='hello';
b='hello';
}else{
// var a=10;
a=10;//局部变量
}
console.log(b);
console.log(a);
}
show();
console.log(a);//全局变量
</script>
总结:
建议:优先使用局部变量
因为全局变量生命周期更长(和页面的生命周期一致),占用内存时间较长,局部变量使用完毕可以等待回收,更加合理。