解析js中undefined和ReferenceError的区别

790 阅读1分钟

最近在学习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,从基础的看起,有错误的地方,欢迎大家指摘