函数声明和函数表达式咋眼一看这个名字以为没有什么区别, 其实还是有很大区别的 (特别是用法)
函数声明是这个样子的
- 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 啊, 但是看到旁边的答案就在想为什么是这个答案, 其实函数声明和函数表达式有很重要的一点, 那就是:
函数声明有函数提升, 会在预编译环节把声明和函数体整体提升到执行环境顶部, 所以可以在函数声明之前调用这个函数 (其实也就是函数可以在任意地方调用)
而函数表达式的调用, 只能在函数表达式之后
这两句话就解释了上面输出结果
来源: https://www.2cto.com/kf/201807/760162.html