全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-16 6 分钟 ✍️ juanwangdev

函数定义与调用

函数是可重复使用的代码块,用于封装逻辑、提高代码复用性。

函数声明

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');

要点总结

  1. 函数声明存在提升,函数表达式不存在
  2. 函数表达式需先定义后调用
  3. call 逐个传参,apply 传数组
  4. IIFE用于创建独立作用域
  5. 函数是JavaScript的一等公民,可作为值传递

📝 发现内容有误?点击此处直接编辑

← 上一篇 作用域与变量提升
下一篇 → 参数传递
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库