函数声明与函数表达式的区别

函数声明

function functions(flag) {
    if (flag) {
      function getValue() { return 'a'; }
    } else {
      function getValue() { return 'b'; }
    }

    return getValue();
}

函数表达式

function functions(flag) {
    if (flag) {
      var getValue=function() { return 'a'; }
    } else {
      var getValue=function() { return 'b'; }
    }

    return getValue();
}

 

原题的写法,是在两个逻辑分支里面各有一个函数声明,但是对于函数声明,解析器会率先读取并且让其在执行任何代码前可用,意思就是别的代码还没运行呢,两个getValue声明已经被读取,所以总是执行最新的那个。

函数表达式,当解析器执行到它所在的代码行时,才会真正被解释执行,所以两个逻辑分支可以分别执行

 

 

function 函数名(){}   和  var 函数名 = function(){}的解析顺序的区别 
前者是在执行之前就会被解析    后者是在执行过程中
 
 
 
函数声明是做了完全提升的,这使你在函数声明前就可以进行函数调用。变量声明是部分提升,只有声明会被提升,赋值(包括函数表达式)操作不会被提升,因此变量声明提前,但是赋值不会被覆盖。
posted @ 2021-04-01 19:15  小菜张!  阅读(126)  评论(0)    收藏  举报