JavaScript的return陷阱

尝试预测以下代码在浏览器中打印的结果

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());

你可能感兴趣的:(JavaScript的return陷阱)