函数声明和函数表达式的区别

404 阅读1分钟

一个小知识点,关于函数声明和函数表达式的区别记录。

getName()
var getName = function (type){
    console.log('321')
}
getName()
function getName() {
    console.log('123')
}
getName()

这个最终结果是什么?

// 函数声明
function xxx() {
}

// 函数表达式, 把一个函数赋值给变量
var xxx = function (){
    xxxx
}
  • 函数声明会存在作用域提升的情况,
  • 函数表达式进行时复制,需要在声明之后才会被调用
  • 函数声明无论是放在被调用后,仍然可以正确使用
getName()
function getName() {
    console.log('123')
}
// 123
  • 函数表达式不行,会报错
getName()
var getName = function (type){
    console.log('321')
}
// Uncaught TypeError: getName is not a function
// 去掉var的声明也同样会报错

针对上述问题的结果是:

123
321
321

参考Blog:

https://github.com/Wscats/Good-text-Share/issues/73