面试题答案
一键面试函数声明式
- 语法:
function functionName(parameters) {
// 函数体
return result;
}
- 作用域特点: 函数声明会提升,即在代码执行之前,函数声明就已经被提升到其所在作用域的顶部,因此在声明之前调用函数是可行的。函数内部创建了一个新的作用域,函数参数和函数内定义的变量都在这个作用域内有效。
函数表达式
- 语法:
const functionName = function(parameters) {
// 函数体
return result;
};
也有具名函数表达式的形式:
const functionName = function anotherName(parameters) {
// 函数体
return result;
};
- 作用域特点:
函数表达式不会提升,必须在定义之后才能调用。它同样在内部创建新的作用域,函数参数和内部变量在此作用域有效。具名函数表达式中,
anotherName
只能在函数内部访问,外部访问仍然通过functionName
。
箭头函数
- 语法:
- 无参数或多个参数:
const functionName = () => {
// 函数体
return result;
};
const functionName = (param1, param2) => {
// 函数体
return result;
};
- 单个参数且函数体只有一个表达式时可简写:
const functionName = param => expression;
- 作用域特点:
箭头函数没有自己的
this
绑定,它的this
取决于其定义时的外部作用域(词法作用域),不会被调用方式影响。箭头函数也没有arguments
对象,若要访问参数,需使用剩余参数语法(...args)
。它同样在内部创建新的作用域,但this
、arguments
等特性与传统函数不同。