JavaScript 函数声明方式及区别
函数声明式与函数表达式的区别和使用场景
问题
JavaScript 中函数有哪几种声明方式?它们有什么区别?
解答
JavaScript 函数主要有两种声明方式:函数声明式和函数表达式。
函数声明式
使用 function 关键字声明,会发生函数提升,可以在声明前调用。
test(); // 测试
function test() {
console.log("测试");
}
test(); // 测试
函数表达式
将函数赋值给变量,不会发生函数提升,必须先声明后调用。
test(); // 报错:TypeError: test is not a function
var test = function() {
console.log("测试");
};
test(); // 测试
函数表达式的特殊用法
函数表达式可以直接执行(自执行函数):
// 函数声明式不能直接执行
function fun(){
console.log('我是一个函数声明式')
}(); // SyntaxError: Unexpected token
// 函数表达式可以直接执行
var foo = function (){
console.log('我是一个函数表达式')
}();
// 自执行函数(IIFE)
(function fun(){
console.log('我是一个函数表达式')
})(); // 我是一个函数表达式
关键点
- 函数声明式会发生变量提升,可以在声明前调用;函数表达式不会提升,必须先声明后调用
- 函数声明式的函数名是必需的,函数表达式的函数名可选
- 函数表达式可以作为自执行函数(IIFE)立即执行,函数声明式不可以
- 自执行函数即使带有函数名,也属于函数表达式
目录