函数参数
上一课把步骤打包装进一个名字;括号还是空的。真正的程序需要输入——名字、合计、消息——好让同一段函数体用不同值工作。这些有名字的空位叫形参(parameters)。调用时递进去的值叫实参(arguments)。
形参与实参
写 function greet(name) { … } 时,name 是形参:函数体里的本地名字。写 greet("Sara") 时,"Sara" 是实参:这次调用填进该空位的具体值。同一份菜谱,不同食材。
各自写在哪里
📊 形参与实参对照
| 概念 | 写在哪里 | 日常比喻 |
|---|---|---|
| 形参 | 声明时的 () 里 |
贴着 name 标签的空碗 |
| 实参 | 调用时的 () 里 |
你倒进去的东西——"Sara" |
| 顺序 | 从左到右 | 第一个实参 → 第一个形参 |
| 默认值 | 声明里 name = "friend" |
没带东西时碗里已有备用 |
| 缺位 | 实参个数更少的调用 | 没有默认值时该形参为 undefined |
形参属于声明。实参随每次调用出现。把两个词搞混是新手常见失误——习惯养成前把表放在手边。
function greet(name) {
console.log("Hello, " + name);
}
greet("Sara");
一个输入,一个空位
name 在 greet 里等待。调用传入 "Sara"。函数体拼出 Hello, Sara 并打印。只改实参、保留函数体——这就是形参的价值。
function add(a, b) {
console.log(a + b);
}
add(3, 4);
两个空位,两个值
用逗号列出形参:a, b。按相同顺序传实参:3 进 a,4 进 b。日志显示 7。函数体没有写死这些数字——调用提供它们。
function label(color, surface) {
console.log(color + " on " + surface);
}
label("red", "wall");
label("wall", "red");
顺序就是约定
第一次调用打印 red on wall。第二次打印 wall on red——同一函数,实参对调。JavaScript 不会猜哪个值「像颜色」。位置说了算。
function greetFriend(name = "friend") {
console.log("Hi, " + name);
}
greetFriend("Ali");
greetFriend();
没传入时的备用值
name = "friend" 设了默认值。greetFriend("Ali") 仍用 "Ali"。空括号的 greetFriend() 用 "friend"。调用方跳过空位时,默认值保护函数体。
function showId(id) {
console.log(id);
}
showId();
既没值也没默认
showId() 什么也没传给 id。没有默认值时,id 是 undefined,打印的也是它。不是崩溃——而是提醒你忘了实参,或该加默认值。
把字符串传给页面
还是之前的 DOM 写法,但文案由实参拼出。同一函数可以欢迎不同客人——只改调用即可。下面的 HTML 演示正是如此。
在页面上展示形参
声明一个接收客人姓名的函数,把简短欢迎写进段落,再用真实字符串调用它。
<!DOCTYPE html>
<html>
<head>
<title>parameters — page</title>
</head>
<body>
<p id="msg">…</p>
<script>
function welcome(guest) {
let box = document.getElementById("msg");
box.textContent = "Hello, " + guest;
}
welcome("Omar");
</script>
</body>
</html>
页面显示 Hello, Omar。guest 是形参;"Omar" 是实参。只改调用里的字符串,刷新后看新行。下一课是 return——把值从函数里送出去。
自己动手
- 写
function hello(name),打印"hi "加上name,用你的名字调用。 - 写
function sum(x, y),打印x + y,用两个数字调用。 - 对两个形参的函数调用两次并交换实参,比较日志。
- 加上如
title = "guest"的默认值;一次带值、一次空()调用。 - 无实参、无默认值调用单形参函数;在控制台确认
undefined。 - 在 HTML 演示里只改实参字符串,刷新并阅读段落。
常见错误
- 函数体需要值却用空
()调用——没有默认就会得到undefined - 对调实参顺序还指望 JavaScript「知道」谁是谁
- 把形参(声明)和实参(调用)搞混
- 两个形参或两个实参之间漏掉逗号
- 在这里找返回值——那是下一课;本页只讲输入
小结
- 形参是声明
()里的名字 - 实参是调用时传入的值
- 顺序从左到右——第一对第一、第二对第二
- 调用方跳过空位时,默认值会填上
- 没有默认的缺位变成
undefined - 页面更新可以在文案里使用传入的值
- 下一课:return——把结果从函数送出
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部