JavaScript函数参数

JavaScript函数参数完全指南

JavaScript函数参数完全指南

编程小白也能理解的函数参数知识点汇总

1. 基础参数:形参和实参

函数参数分为两种:

  • 形参(Parameters):函数定义时声明的变量
  • 实参(Arguments):函数调用时传入的具体值
// 形参: a, b
function add(a, b) {
    return a + b;
}

// 实参: 5, 3
let result = add(5, 3); // 返回8

大白话:形参是函数定义时的”占位符”,实参是调用函数时实际传进去的值。

💡 提示:形参和实参的数量可以不同!JavaScript不会强制要求数量一致。

2. 默认参数值(ES6)

ES6允许给参数设置默认值,当没有提供相应参数或传入undefined时使用。

function greet(name = "朋友") {
    return `你好, ${name}!`;
}

console.log(greet()); // "你好, 朋友!"
console.log(greet("小明")); // "你好, 小明!"

大白话:为参数设定默认值,就像”备胎”一样,当没有传入值时就用默认值。

⚠️ 注意:只有传入undefined时才会使用默认值,传入null会使用null值!

3. 剩余参数(…rest)

使用语法将多个参数收集到一个数组中。

function sum(...numbers) {
    return numbers.reduce((acc, num) => acc + num, 0);
}

console.log(sum(1, 2)); // 3
console.log(sum(1, 2, 3, 4)); // 10

大白话:剩余参数就像”收集器”,把所有未匹配的参数装进一个数组里。

💡 提示:剩余参数必须是最后一个参数!

📝 与arguments对象的区别:剩余参数是真正的数组,可以使用数组方法。

4. 对象参数解构

直接从传入的对象中提取需要的属性。

function showUser({ name, age, email }) {
    console.log(`姓名: ${name}, 年龄: ${age}, 邮箱: ${email}`);
}

showUser({
    name: "张三",
    age: 25,
    email: "zhangsan@example.com"
});

大白话:直接从对象中”拆包”出需要的属性,就像拆快递包裹一样。

⚠️ 注意:调用时必须传入对象,否则会报错!可以使用默认值避免:

function showUser({ name = "未知", age = 0 } = {}) {
    // ...
}
5. 参数传递方式

JavaScript中参数传递都是按值传递

  • 基本类型(数字、字符串等):传递值的副本
  • 对象类型:传递对象引用的副本
// 基本类型 - 不影响外部变量
function changeNum(num) {
    num = 10;
}

let myNum = 5;
changeNum(myNum);
console.log(myNum); // 5(未变)

// 对象类型 - 修改属性会影响外部对象
function changeProp(obj) {
    obj.name = "修改后的名字";
}

const person = { name: "张三" };
changeProp(person);
console.log(person.name); // "修改后的名字"

大白话:

  • 基本类型:给你一张照片📷,你修改照片不影响原件
  • 对象类型:给你一份地址📍,你按地址找到房子并装修,会影响实际房子
6. arguments对象

函数内部可用的类数组对象,包含所有传入的参数。

function showArguments() {
    console.log(arguments.length); // 参数个数
    console.log(arguments[0]); // 第一个参数
    console.log(arguments[1]); // 第二个参数
}

showArguments("a", "b", "c");

大白话:arguments就像一个”收纳盒”,里面装了所有传入函数的参数。

⚠️ 注意:arguments不是真正的数组,不能直接使用数组方法!可通过Array.from(arguments)转换。

💡 现代JavaScript中建议使用剩余参数(…rest)替代arguments!

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部