以下代码执行后, num 的值是?
var foo=function(x,y){
return x-y;
}
function foo(x,y){
return x+y;
}
var num=foo(1,2);
答案: -1
解析:
//variable hoisting变量提升
var foo;//foo#1
var num;
//function declaration hoisting函数声明提升
function foo(x, y){//foo#2
return x + y;
}
//function expression NOT hoisted函数表达式不会被提升
foo =function(x, y){//foo#3 覆盖前面的函数
return x - y;
}
num = foo(1, 2);//这里使用foo#3
规则:
- 变量声明、函数声明都会被提升到作用域顶处;
- 当出现相同名称时,优先级为:变量声明(foo#1) < 函数声明(foo#2) < 变量赋值(foo#3)
因此,num计算时是用的foo#3。答案为-1。