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