函数声明和函数表达式定义同一个函数时,执行的是哪个?

andy Javascript 297

函数声明和函数表达式定义同一个函数时,执行的是哪个?


    // 以下代码执行时,三次打印分别输出什么?为什么?

    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
  1. 函数声明:101     
  2. 函数表达式:11
  3. 函数表达式:11
  4. 当函数申明和函数表达式同时定义一个函数时,执行函数表达式定义的函数,
  5. 第一个由于在函数表达式定义之前调用,所以调用的是函数申明定义的函数,又由于函数申明重复定义了这个函数所以执行最后函数申明定义的函数,
  6. 第二个由于在函数表达式定义的函数后面正常执行函数表达式定义的函数得到结果11,
  7. 第三个当函数申明和函数表达式同时定义一个函数时,执行函数表达式定义的函数,所以是11
  • 暂无回复内容