function functions(flag) { if (flag) { function getValue() { return 'a'; } } else { function getValue() { return 'b'; } } return getValue(); } console.log(function functions(true));
请问这段代码会输出什么呢。javascript
答案将永远是:b。java
解释一下为何,由于在js是没有块级做用域的,又由于函数声明提高的缘由,上面的这段代码变至关于:函数
function functions(flag) { function getValue(){return 'a'}; function getValue(){return 'b'}; if (flag) { .... } else { .... } return getValue(); }
所以不管flag为什么值,返回的方法始终为重写后的方法。blog
那么怎么才能解决这个问题呢...ip
function functions(flag) { if (flag) { var getValue = function () { return 'a'; } } else { var getValue = function () { return 'b'; } } return getValue(); }
再也不用函数声明,而是用函数表达式的方法,由于函数表达式不会提高,所以只有当逻辑只想到这儿的时候才会执行。因此就解决问题啦。作用域