函数定义后能否修改参数?调用参数名替换疑问及猜想验证
温度转换函数的参数疑问解答
先贴出你的代码:
function convertToFahrenheit(celsius) { return (celsius * 9 / 5) + 32; } function convertToCelsius(fahrenheit) { return (fahrenheit - 32) * 5 / 9; } function convertTemperature(degrees, unit) { if (unit === 'C') { const result = convertToFahrenheit(degrees); /* How can we use "degrees" here? */ return `${result}F`; } else if (unit === 'F') { const result = convertToCelsius(degrees); /* How can we use "degrees" here? */ return `${result}C`; } } console.log(convertTemperature(25, 'C')); console.log(convertTemperature(86, 'F'));
为什么传入degrees能正常工作
函数定义里的参数名(比如convertToFahrenheit的celsius、convertToCelsius的fahrenheit)只是形参——就是个占位符,用来接收调用时传入的具体数值。
当你调用convertToFahrenheit(degrees)时,本质是把degrees变量存的数值(比如第一个调用里的25)传给函数,函数内部会把这个数值赋值给celsius变量来计算。参数名只是函数内部指代这个值的名字,和外部调用时的变量名没有绑定关系,只要传的是合法数值就行。
你的猜想不对,不是传入degrees本身,而是传入它代表的具体值。
函数定义后能不能修改参数?
没法直接修改已定义函数的参数列表,但有两种变通方式:
- 重新定义同名函数,覆盖原有版本,比如重新写一个
convertToFahrenheit,用不同的参数列表; - 用
arguments对象或者ES6的剩余参数(...args)处理可变数量的参数,不用修改原参数定义也能接收更多参数。
注意,重新定义函数会完全覆盖原来的逻辑,使用时要谨慎。
内容的提问来源于stack exchange,提问作者Shailesh
相关产品推荐
相关产品推荐

