函数 | 函数声明与函数表达式
函数定义
函数通常可以以(1)函数声明;(2)函数表达式 ;(3)Function构造函数【不推荐】 三种方式进行定义。
函数声明
(一般来说,函数声明最后没有分号,因为在代码块的结尾不需要加分号)
1 | function sum(num1, num2) { |
函数表达式
(函数表达式实际上是赋值的形式,建议加上分号)
函数表达式就像一个普通的变量定义和赋值,即创建一个函数再把它赋值给一个变量functionName,这样创建的函数叫做匿名函数(未赋值给其他变量的匿名函数的name属性是空字符串)
1 | let sum = function(num1, num2) { |
函数表达式有几种不同的形式:
形式一(最常见):
1
2
3let functionName = function(...args) {
// 函数体
};形式二:一个函数把另一个函数当作值返回
1
2
3
4
5
6
7
8function createComparisonFunction(propertyName) {
return function(object1, object2) {
let value1 = object1[propertyName];
let value2 = object2[propertyName];
return value1 + value2;
};
}createComparisonFunction()函数返回一个匿名函数,这个匿名函数可以被赋值给一个变量或者直接调用,任何时候,只要函数被当作值来使用,它就是一个函数表达式
函数声明 和 函数表达式的区别
两者最主要的区别是:函数声明提前
1 | // eg1:函数声明提前 |
红宝书解释如下: JavaScript引擎在任何代码执行之前,会先读取函数声明,并在执行器上下文中生成函数定义,而函数表达式必须等到代码执行到它那一行,才会在执行上下文中生成函数定义。
面试题
1 | // eg1 |