JS中的函数声明和函数表达式
1. 函数声明定义一个具有指定参数的函数
- 函数声明提升, 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用
hoisted();
function hoisted() {
console.log('foo');
}
2. 函数表达式function 关键字可以用来在一个表达式中定义一个函数
- 函数表达式提升, JavaScript中的函数表达式没有提升,不像函数声明,你在定义函数表达式之前不能使用函数表达式:
notHoisted();
var notHoisted = function() {
console.log('bar');
};
更多情况是通过回调函数使用
button.addEventListener('click', function(event) {
console.log('button is clicked!')
})
3. 总结
函数表达式(function expression)非常类似于函数声明(function statement),并且两者拥有几乎相同的语法。 函数表达式与函数声明的最主要区别
- 函数名称,在函数表达式中可省略它,从而创建匿名函数
- 变量提升, 函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用
- 函数声明可以先调用再声明,而函数表达式必须先定义再调用
|