函数表达式和函数声明

函数声明和函数表达式咋眼一看这个名字以为没有什么区别,其实还是有很大区别的(特别是用法)

函数声明是这个样子的

 function fn(){
   //代码块
}
 fn(); //调用

函数表达式是这个样子的

//没有参数
var demo = function fn1(){
     //代码块
}
 demo(); //正确的调用
 fn1();  //错误的调用

//前后两个函数的名字可以相同,也可以不相同
//function后面的这个名字可以省略,并且只能在函数内部使用

//带参
var demo1 = function fn2(a,b){
  //代码块
}
demo(fn2(3,5))   //调用

既然知道了函数声明和函数表达式长什么样子了,那么来看看下面这一段代码

test1(); //100
demo1(); //demo1 is not a function
function test1(){
  console.log(100);
}
var demo1 = function test2(){
  console.log(50);
}

第一眼觉得这么简单啊 肯定输出100和50啊,但是看到旁边的答案就在想为什么是这个答案,其实函数声明和函数表达式有很重要的一点,那就是:

     函数声明有函数提升,会在预编译环节把声明和函数体整体提升到执行环境顶部,所以可以在函数声明之前调用这个函数(其实也就是函数可以在任意地方调用)

    而函数表达式的调用,只能在函数表达式之后

这两句话就解释了上面输出结果

猜你喜欢

转载自www.cnblogs.com/jrrrrr/p/9242736.html