变量提升和函数声明提升

JS引擎的工作方式:先解析代码,获取所有变量的声明。

  • 变量提升
    var a = 1;
    var b = 2;
    var c = 3;

等价于

    var a;
    var b;
    var c;
    a = 1;
    b = 2;
    c = 3;

所以

    console.log(a);//undefined 不会报错
    console.log(c);// c is not defined 报错
    var a = 1;
    var b = 2;

等加于:

    var a;
    var b;
    console.log(a);//undefined 不会报错
    console.log(c);// c is not defined 报错
    a = 1;
    b = 2;
  • 函数声明提升
  • 当函数通过函数声明进行定义时,会有声明提升
   printNum();//有效,控制台打印了1
   function printNum(){
       console.log('1');
   }
  • 但是,通过其他方式定义的函数没有声明提升

1.构造函数

   printNum();//报错 printNum is not a function(...)
   var printNum = new Function("console.log('1');");

2.函数表达式

   printNum();//报错 printNum is not a function(...)
   var printNum = function(){
       console.log(1);
   };

你可能感兴趣的:(变量提升和函数声明提升)