为什么这个JavaScript函数返回' 2'?

时间:2014-05-21 23:10:17

标签: javascript

我遇到了这个奇怪的JavaScript函数:

(function f(){
    function f(){ return 1; }
    return f();
    function f(){ return 2; }
})();

由于某种原因,它返回2.我认为它会使浏览器崩溃(即递归)

任何人都可以解释这种行为吗?

1 个答案:

答案 0 :(得分:8)

函数声明被挂起,所以最终看起来像这样:

(function f() {
    function f() { return 1; }
    function f() { return 2; }
    return f();
})();

这是这样的:

(function f() {
    var f = function f() { return 1; };
    var f = function f() { return 2; };
    return f();
})();

相当于:

(function f() {
    var f = function f() { return 1; };
    f = function f() { return 2; };
    return f();
})();

相当于:

(function f() {
    var f = function f() { return 2; };
    return f();
})();

并且更紧密范围内的f优先于外部范围。