You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重复声明含默认参数的函数后调用返回NaN的原因咨询

重复声明函数后返回NaN的原因解析

核心逻辑:函数声明的提升与覆盖

JavaScript里函数声明会被提升到当前作用域的最顶部,要是有同名的函数声明,后面的会直接覆盖前面的版本。

你的代码里,虽然带默认参数的函数写在前面,但实际执行时,两个函数声明都会被提升到作用域顶部,最终是后面那个不带默认参数的monitorCount生效,前面带默认值的版本直接被覆盖了。

实际执行顺序拆解

代码实际运行的逻辑等价于下面这样:

// 先提升函数声明,后面的覆盖前面的
function monitorCount(rows,columns){
    console.log(typeof rows,typeof columns);
    return rows*columns;
}

// 执行原代码里的调用语句
console.log(monitorCount()); // 调用的是无默认参数的版本,rows和columns都是undefined
console.log(typeof monitorCount());
// 原第一个带默认参数的函数已经被覆盖,完全不生效

调用monitorCount()时没传参,所以rows和columns都是undefined,undefined * undefined的结果就是NaN。而typeof NaN本身就是number,这就是你看到的现象的原因。

单次声明正常的原因

如果只保留带默认参数的函数,调用monitorCount()时会自动使用默认值rows=5和columns=3,计算5*3=15,自然返回正确结果。

避坑提示

  • 别在同一作用域里重复声明同名函数,很容易搞乱代码逻辑。
  • 要是需要实现类似“重载”的效果,可以通过判断参数的个数、类型来处理,或者改用函数表达式(比如const monitorCount = function(rows=5, columns=3) {}),函数表达式不会被提升,也就不会出现被覆盖的问题。

内容的提问来源于stack exchange,提问作者mikeli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:27:10