函数声明
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声明已经被读取,所以总是执行最新的那个。
函数表达式,当解析器执行到它所在的代码行时,才会真正被解释执行,所以两个逻辑分支可以分别执行
原文:https://www.cnblogs.com/xiaocaizhang/p/14607736.html