js javascript变量提升
var:变量提升(无论声明在何处,都会被提至其所在作用域的顶部)
let:无变量提升(所在的块内,未到let声明时(即let声明之前),是无法访问该变量的(not defined)),let变量不能重复声明(报错has already been declared)
const:无变量提升,声明一个基本类型的时候为常量,不可修改;声明对象可以修改
<script>
var a = 1;
function fn() {
console.log(a)//undefined
a = 2;
console.log(a)//2
var a = 3;
console.log(a)//3
}
/* var声明变量提升到作用域顶部
fn等价于
function fn() {
var a;
console.log(a)//undefined
a = 2;
console.log(a)
a = 3;
console.log(a)
}
*/
function fn2() {
//console.log(a)//a is not defined,let声明之前不能使用
let a = 4;
//let a = 5;//a has already been declared,在同一个作用域内let不能重复声明如果{let a=5;}就可以,{}内的let声明作用域只在{}有效
console.log(a)//4
}
function fn3() {
console.log(a)//1
a = 6;
}
fn();
fn2();
fn3();
console.log(a);//6
</script>
还有以下例子,可以看出函数也存在提升一说:
<script> console.log(fn);//ƒ fn() {} var fn = 1; function fn() {} console.log(fn);//1 /*函数提升,提升到作用域最前 等价于 var fn = undefined; function fn() {} console.log(fn); fn = 1; console.log(fn); */ </script>
具体的提升可以参照:https://zhuanlan.zhihu.com/p/28140450

浙公网安备 33010602011771号