函数声明和函数表达式定义同一个函数时,执行的是哪个?
// 以下代码执行时,三次打印分别输出什么?为什么?
function add1(i){
console.log("函数声明:"+(i+1));
}
add1(1);
var add1 = function(i){
console.log("函数表达式:"+(i+10));
}
add1(1);
function add1(i) {
console.log("函数声明:"+(i+100));
}
add1(1);
回答
云松回答
问题分析:
根据以上代码分析,实际执行过程是这样的
var add1;
function add1(i){
console.log("函数声明:"+(i+1));
}
//覆盖了前一个
function add1(i) {
console.log("函数声明:"+(i+100));
}
add1(1);//得101
------------------------------
//再次覆盖了前面的
add1 = function(i){
console.log("函数表达式:"+(i+10));
}
add1(1);//得11
add1(1);//得11
第一个由于在函数表达式定义之前调用,所以调用的是函数申明定义的函数,又由于函数申明重复定义了这个函数所以执行最后函数申明定义的函数,
第二个由于在函数表达式定义的函数后面正常执行函数表达式定义的函数得到结果11,
第三个当函数申明和函数表达式同时定义一个函数时,执行函数表达式定义的函数,所以是11
问题答案:
1、函数声明:101
2、函数表达式:11
3、函数表达式:11
(1)