JS 函数声明和函数表达式的区别
函数声明和函数表达式的区别
函数声明即:
function sayHello() {
console.log("Hello,World.");
}
函数表达式即:
const sayHello = function () {
console.log("Hello,World.");
};
两者几乎没有什么区别,但是有一些地方还是需要注意:
函数声明和变量声明类似,会被提升至作用域的顶部,所以可以在声明之前使用。
sayHello(); // 输出 Hello,World. function sayHello() { console.log("Hello,World."); }
而函数表达式不可以
sayHello(); // 会报错, Uncaught ReferenceError: can't access lexical declaration 'sayHello' before initialization const sayHello = function () { console.log("Hello,World."); };
两者的形式不太一样
函数声明的代码末尾没有分号,而函数表达式的代码末尾有分号,这是为什么?
因为函数声明是一个代码块,和
if {}
或for {}
类似,所以不需要。而函数表达式属于一个语句,就上面的例子而言,它属于
const SayHello = ...
的一部分,所以在语句的末尾需要添加一个分号。
应该使用哪种方式?
在大多数情况下优先使用函数声明,因为声明会被提升(host),可以更方便的组织代码,更有灵活性,而且在搜索代码时 function sayHello()
明显要比 const sayHello = function ()
更容易检索。
在一些函数声明无法满足需要的情况下,再考虑使用函数表达式的方式。