返回
函数声明与函数表达式:细说异同,助你选择自如
前端
2024-02-05 10:38:31
在 JavaScript 的舞台上,函数并非魔法,而是一种有形的“变量”。作为这出戏的幕后主使,函数或函数表达式会潜移默化地操纵代码,实现意想不到的妙效。是时候揭开它们的面纱,一探究竟,并领悟在何种情境下该“请君入瓮”!
函数声明 vs 函数表达式:画地为牢
函数声明和函数表达式看似异曲同工,实则暗藏玄机。函数声明 以 function 开头,后跟函数名和圆括号参数列表,最后用大括号包裹函数体。而函数表达式 则巧妙地将函数分配给一个变量,用圆括号包裹函数体,没有独立的函数名。
举个栗子:
// 函数声明
function greet(name) {
console.log(`Hello, ${name}!`);
}
// 函数表达式
const sayHi = function (name) {
console.log(`Hello, ${name}!`);
};
this 的归属:谁与争锋
在 JavaScript 中,this 关键词代表当前执行上下文的引用。对于函数声明 ,this 指向全局对象,在严格模式下为 undefined;而对于函数表达式 ,this 指向定义函数时所在的作用域。
function greet() {
console.log(this); // window
}
const sayHi = function() {
console.log(this); // undefined
};
词法作用域:追根溯源
词法作用域决定了函数可以访问哪些变量。函数声明 在编译阶段就已经确定了其作用域,可以访问声明时所在的作用域中的所有变量,包括后来声明的变量。而函数表达式 的作用域是在运行时确定的,只能访问定义时所在的作用域中的变量。
const x = 10;
function greet() {
const y = 20;
console.log(x); // 10
console.log(y); // 20
}
const sayHi = function() {
const y = 30;
console.log(x); // 10
console.log(y); // 30
};
使用之道:因地制宜
如何取舍函数声明和函数表达式?明辨如下:
- 当需要在全局作用域中定义一个函数时,使用函数声明。
- 当需要动态创建函数或将函数作为参数传递给另一个函数时,使用函数表达式。
- 当需要在特定作用域中绑定 this 时,使用函数表达式。
- 当需要提升函数优先级或在早期访问函数时,使用函数声明。
总结:落幕点睛
函数声明和函数表达式是 JavaScript 中的两大法宝。函数声明更适合定义全局函数或在需要早期访问的情况下;函数表达式则更灵活,适用于动态创建函数或需要特定作用域绑定的场景。掌握它们的异同,巧妙运筹帷幄,定能谱写出代码的华美乐章!