以下代码执行后, num 的值是?
var foo=function(x,y){
return x-y;
}
function foo(x,y){
return x+y;
}
var num=foo(1,2);
A
-1
B
3
C
1
D
2
正确答案:A
选A。该题考察的是JS解析顺序。
根据题干:
匿名函数,需要通过变量引用指向函数的运行结果。
var foo=function(x,y){
//赋值式函数 return x-y;
}
有名函数,可以单独定义。
function foo(x,y){
//声明式函数 return x+y;
}
实际调用 var num=foo(1,2); //调用赋值式函数 return x-y 为 -1
变量提升,声明提升,函数表达式不提升。最后执行匿名函数
函数提升优先级高于变量提升,且不会被同名变量声明时覆盖,但是会被变量赋值后覆盖。
考点:函数提升、变量提升
//实际代码过程如下:
function foo(x,y){ //函数是一等公民,
return x+y; //用function定义的函数声明会直接提升到最顶层(区分函数表达式)
}
var foo; //函数表达式中的变量提升
var num; //普通变量的变量提升
foo = function(x,y){ //赋值后此时foo是这个函数,不是最上面的那个了
return x-y;
}
num = foo(1,2);
js预解析机制,
js会预解析var和function这两个关键字,并给var赋值undefined,即
标签:function,return,函数,提升,var,foo,表达式 From: https://www.cnblogs.com/longmo666/p/17833571.html