
在 javascript 中,函数定义时的参数名(形参)仅是内部占位符,调用时传入的值(实参)无需同名;实参可以是变量、字面量或表达式,其名称与函数内部参数名完全无关。
在 javascript 中,函数定义时的参数名(形参)仅是内部占位符,调用时传入的值(实参)无需同名;实参可以是变量、字面量或表达式,其名称与函数内部参数名完全无关。
你提供的代码中,convertToFahrenheit(celsius) 和 convertToCelsius(fahrenheit) 分别以 celsius 和 fahrenheit 作为形参名(即函数内部用于接收传入值的局部变量名),而 convertTemperature(degrees, unit) 在调用它们时传入的是变量 degrees —— 这里的 degrees 是一个实参表达式,它本身只是一个变量标识符,其名称对被调用函数完全透明。
关键在于:函数调用时传递的是值(原始类型)或引用(对象/数组等),而非变量名本身。例如:
function convertToFahrenheit(celsius) {
return (celsius * 9 / 5) + 32;
}
const temp = 25;
console.log(convertToFahrenheit(temp)); // ✅ 正确:temp 的值(25)被传入,赋给形参 celsius
console.log(convertToFahrenheit(25)); // ✅ 同样正确:字面量 25 直接传入,无需变量
console.log(convertToFahrenheit(10 + 15)); // ✅ 表达式结果 25 传入
在 convertTemperature 内部:
-
convertToFahrenheit(degrees)并非“把变量 degrees 的名字传进去”,而是将degrees当前持有的数值(如25)作为实参传递; - 进入
convertToFahrenheit后,该数值被绑定到其局部变量celsius,与外部变量degrees在逻辑和作用域上完全隔离; - 同理,
convertToCelsius(degrees)将同一数值传入fahrenheit形参,二者命名不同,但数据流动清晰、无冲突。
⚠️ 注意事项:
- 形参名仅在函数体内有效,对外部无影响;
- 修改形参值(如
celsius = 100)不会改变外部degrees的值(对原始类型而言); - 对于对象或数组等引用类型,形参与实参变量会指向同一内存地址,此时内部修改可能影响外部(需注意副作用)。
总结:参数名是函数的“内部接口契约”,而调用时的实参是“数据提供者”——二者解耦设计正是 JavaScript 灵活性与可维护性的基础。不必追求名称一致,而应关注数据语义是否清晰、逻辑是否正确。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











