我有这段代码:
(function f(){
function f(){ return 1; }
return f();
function f(){ return 2; }
})();
为什么这段代码打印'2'?
答案 0 :(得分:6)
函数声明被提升,因此在评估return
语句之前处理它们。
第二个函数会覆盖第一个函数,因为它们具有相同的名称。
答案 1 :(得分:4)
在javascript中,函数定义被提升到其包含函数的顶部。
您的功能由浏览器解释如下:
(function f(){
//Functions defined first
function f(){ return 1; }
function f(){ return 2; } //<- Hoisted to top, now this is what f is
//Now the rest of the code runs
return f();
})();
答案 2 :(得分:2)
因为函数在return语句之前被提升和处理,所以你的最后一个函数f()返回2并且它会覆盖第一个函数。