JS变量声明提升和函数声明提升

JS代码在执行的时候会先找出执行代码中定义的变量和函数,对其进行声明。

例1:console.log(a);

var a = 4;

此时输出undefined。a变量在执行console.log(a);这条语句之前就已经被定义了只是没有赋值。实际的执行顺序是:var a ; console.log(a);a=4;

 

例2:var a = 3;

function fn(){

  console.log(a);

  var a = 4;

}

fn();

执行输出undefined。在执行fn()函数时由于变量提升实际执行的顺序是:var a;console.log(a);a=4;。所以输出undefined。如果没有在函数中重新定义变量a,则输出a时的值就是全局的a的值为3,因为在输出a时会优先取离奇最近的那个a变量的值。

 

例3:

fn();

function fn(){

  var a = 4;

  console.log(a);

}

执行输出4。因为函数声明提升,会优先执行函数的声明。实际执行的代码:

function fn(){

  var a = 4;

  console.log(a);

}

fn();

 

例4:

fn1();

var fn1 = function(){

  console.log(4);

}

执行结果会报。这里是变量声明会优先,函数声明提升只使用于使用函数声明的方式。这里执行的代码顺序为:var fn1;fn1();fn1 = function(){console.log(4);}

posted @ 2020-02-01 10:45  maycpou  阅读(234)  评论(0编辑  收藏  举报