为什么这个JavaScript函数返回';2';?
我遇到了这个奇怪的JavaScript函数:为什么这个JavaScript函数返回';2';?,javascript,Javascript,我遇到了这个奇怪的JavaScript函数: (function f(){ function f(){ return 1; } return f(); function f(){ return 2; } })(); 出于某种原因,它返回2。我认为它会使浏览器崩溃(即递归) 有人能解释这种行为吗?函数声明被挂起,因此它最终看起来像这样: (function f() { function f() { return 1; } function f() { re
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
出于某种原因,它返回2。我认为它会使浏览器崩溃(即递归)
有人能解释这种行为吗?函数声明被挂起,因此它最终看起来像这样:
(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() {
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();
})();
这相当于:
(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
更受欢迎。请解释为什么有人会编写这种模糊、难以理解的代码?我不知道这是不是复制品。当然,它们都与提升有关,但别这样,真的吗?问题是不同的。“最好把所有的问题都结束……”达菲莫很遗憾,这实际上是一个我弄错的面试问题。。我同意你的看法。哇!这是一个惊人的快速回答!!谢谢minitech。我得绕着它转。再次感谢。“与外部范围相比,更紧范围内的f更可取。”实际上没有外部f
。函数表达式的名称仅在函数内部可用,但会被其内部的新函数定义覆盖。