尝试预测以下代码在浏览器中打印的结果
var flag = true;
function fn(){
if(flag)
{
flag = false;
fn();
}
else
{
return 1;
}
}
console.log(fn());
如果你的答案是1,就有必要继续听我bla bla了。
实际打印的是undefined。不好理解原因?我们把代码简化一下看看:
function a(){
return 1;
}
function b(){
a();
}
console.log(b());
这段代码仍然打印出undefined,原因和第一段代码相同。这段代码中,函数a虽然有返回值,但a的返回值并不会因为a被嵌套调用而传给b,没有用return指定返回值的函数都返回undefined.第一段代码中是嵌套调用,但情况一样,内层的函数fn的返回值没有传递到最外层的fn。
要达到预期的结果,解决方法是在函数调用前加return关键字。代码为:
var flag = true;
function fn(){
if(flag)
{
flag = false;
return fn();
}
else
{
return 1;
}
}
console.log(fn());