以下代碼執(zhí)行后涧郊, 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函數(shù)聲明提升
function foo(x, y){//foo#2
return x + y;
}
//function expression NOT hoisted函數(shù)表達(dá)式不會被提升
foo =function(x, y){//foo#3 覆蓋前面的函數(shù)
return x - y;
}
num = foo(1, 2);//這里使用foo#3
規(guī)則:
- 變量聲明钾虐、函數(shù)聲明都會被提升到作用域頂處噪窘;
- 當(dāng)出現(xiàn)相同名稱時(shí),優(yōu)先級為:變量聲明(foo#1) < 函數(shù)聲明(foo#2) < 變量賦值(foo#3)
因此效扫,num計(jì)算時(shí)是用的foo#3倔监。答案為-1。