函数声明与函数表达式的区别
函数声明
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(){}的解析顺序的区别
前者是在执行之前就会被解析 后者是在执行过程中
函数声明是做了完全提升的,这使你在函数声明前就可以进行函数调用。变量声明是部分提升,只有声明会被提升,赋值(包括函数表达式)操作不会被提升,因此变量声明提前,但是赋值不会被覆盖。

浙公网安备 33010602011771号