函数定义与调用
函数是可重复使用的代码块,用于封装逻辑、提高代码复用性。
函数声明
function关键字
JavaScript
function sayHello() {
console.log('Hello!');
}
函数表达式
JavaScript
const sayHello = function() {
console.log('Hello!');
};
具名函数表达式
JavaScript
const sayHello = function hello() {
console.log('Hello!');
};
函数调用
基本调用
JavaScript
function greet(name) {
console.log('Hi, ' + name);
}
greet('Tom'); // Hi, Tom
调用方式对比
| 方式 | 示例 | this指向 |
|---|---|---|
| 直接调用 | fn() | 全局对象/undefined |
| 方法调用 | obj.fn() | obj |
| call调用 | fn.call(obj) | obj |
| apply调用 | fn.apply(obj) | obj |
call和apply
JavaScript
function greet(greeting) {
console.log(greeting + ', ' + this.name);
}
const person = { name: 'Tom' };
greet.call(person, 'Hello'); // Hello, Tom
greet.apply(person, ['Hi']); // Hi, Tom
函数声明与表达式的区别
JavaScript
// 函数声明:存在提升,可以在声明前调用
sayHello(); // 正常执行
function sayHello() {
console.log('Hello');
}
// 函数表达式:不存在提升
sayHi(); // 报错:Cannot access 'sayHi' before initialization
const sayHi = function() {
console.log('Hi');
};
立即执行函数(IIFE)
函数定义后立即执行:
JavaScript
(function() {
console.log('立即执行');
})();
// 箭头函数形式
(() => {
console.log('立即执行');
})();
传递参数:
JavaScript
(function(name) {
console.log('Hello, ' + name);
})('Tom');
要点总结
- 函数声明存在提升,函数表达式不存在
- 函数表达式需先定义后调用
call逐个传参,apply传数组- IIFE用于创建独立作用域
- 函数是JavaScript的一等公民,可作为值传递
📝 发现内容有误?点击此处直接编辑