我遇到了这个奇怪的JavaScript函数:
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
由于某种原因,它返回2.我认为它会使浏览器崩溃(即递归)
任何人都可以解释这种行为吗?
答案 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
优先于外部范围。