题目描述
请修复给定的 js 代码中,函数定义存在的问题
示例1
输入
true
输出
a
题目代码
function functions(flag) {
if (flag) {
function getValue() { return 'a'; }
} else {
function getValue() { return 'b'; }
}
return getValue();
}
我在Chrome和edge都试了一下,题目原本就是能输出正确结果的,所以题目下面有的人的解答拿到高赞真是。。。
然后打断点走了一下,发现运行顺序是这样的:
function functions(flag) {
if (flag) {//2
function getValue() { return 'a'; }// 4
} else {
function getValue() { return 'b'; }
}
return getValue();// 3
}
functions(true); // 1
注意这里2判断了true之后直接执行3,通过3执行4,定义并执行函数getValue。
有的人会问,为什么if(flag)成立,直接执行3不执行if里面的函数定义呢?我也不知道,但是我控制台对if(true)进行watch的时候,控制台报了一个错,而这个错,console里面居然没有打印出来:
所以if(true)里面的函数定义没能执行,原因,暂时还不知道。
然后我又在IE5下面执行了这个代码,发现IE5下面不管是if(true)还是if(false)都会返回"b",然后我又在IE5下面这样试了一下:
function functions(flag) {debugger
if (flag) {
function getValue() { return 'a'; }
} else {
function getValue() { return 'b'; }
}
return getValue();
}
functions(true)
进入debugger后,还没执行下一步,这时候在控制台查看getVale,函数已经存在且为
所以这就是函数声明提前,return "b"那个把return "a"给覆盖了。高版本浏览器估计是发现了这问题,所以报错并且帮我们自动纠正了?