每日一题 2020-11-11


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

规则:

  1. 变量声明、函数声明都会被提升到作用域顶处;
  2. 当出现相同名称时,优先级为:变量声明(foo#1) < 函数声明(foo#2) < 变量赋值(foo#3)

因此,num计算时是用的foo#3。答案为-1。

posted @ 2020-11-19 14:48  pandajs163  阅读(173)  评论(0)    收藏  举报