最近在学习js相关的知识,刷到一道常见的js基础题目,如下
现场还原:
function helloMin(){
console.log(name);
console.log(age);
let name = "min";
var age = 18;
}
helloMin();
输出结果是是什么?
在控制台执行后:
VM126:2 Uncaught ReferenceError: Cannot access 'name' before initialization
at helloMin (<anonymous>:2:17)
at <anonymous>:7:2
这不就是说,初始化name之前无法找到它
去重新翻看了一下js之后发现,可能是变量提升引起的
变量提升
即,JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
var先声明再使用
function helloMin002(){
var age = 18;
console.log(age);
}
helloMin002();
控制台执行结果:
18
var先使用再声明
function helloMin003(){
console.log(age);
var age = 18;
}
helloMin003();
控制台执行结果:
undefined
let先声明再使用
function helloMin005(){
let age = 18;
console.log(age);
}
helloMin005();
控制台执行结果:
18
let先使用再声明
function helloMin006(){
console.log(age);
let age = 18;
}
helloMin006();
控制台执行结果:
VM364:2 Uncaught ReferenceError: Cannot access 'age' before initialization
at helloMin006 (<anonymous>:2:17)
at <anonymous>:5:2
总结
所谓的变量提升,就是先使用再声明变量,在使用时发现该变量未声明,会将该变量提前声明:
- var的变量提升,会将声明提前,同时会给变量初始化为undefined
- let的变量提升,只会将声明提前,但是不会初始化变量,仅仅是declear的作用
so,答案就是:ReferenceError 和 undefined
想深入学习一下js,从基础的看起,有错误的地方,欢迎大家指摘