如何确保JavaScript无参函数不接收参数并在收到参数时抛出错误
你使用arguments.length判断的写法是完全正确的。普通函数内部的arguments是存储所有实际传入参数的类数组对象,arguments.length就是调用时传入的参数数量,你的逻辑只要检测到该值大于0就抛出错误,完全满足需求。
不过要注意:箭头函数没有自身的arguments对象,如果你之后要把函数改写成箭头函数,该方案就不适用,你可以选择下面的其他实现方案:
- ES6+ 剩余参数写法(全场景兼容)
剩余参数会把所有传入的实参收纳到一个数组中,直接判断数组长度即可,写法符合现代JS规范,普通函数、箭头函数都适用:
// 普通函数版本 function ab(...args) { if (args.length > 0) { throw new Error('Cannot pass arguments to this function') } const a = 2 const b = 3 return a + b } // 箭头函数版本 const ab = (...args) => { if (args.length > 0) { throw new Error('Cannot pass arguments to this function') } const a = 2 const b = 3 return a + b }
小提示:建议抛出
Error实例而非普通字符串,错误实例会携带调用栈信息,后续调试排查问题更方便。另外你原代码中的a、b没有加变量声明,会被隐式挂载为全局变量,最好补充let/const声明避免污染全局作用域。
- 静态编译期校验(TypeScript 场景)
如果你的项目使用TypeScript,可以直接在定义阶段就限制函数不接受参数,调用时传参在编译阶段就会报错,提前拦截问题:
function ab(): number { const a = 2 const b = 3 return a + b } // 调用ab('Hello')时TS会直接提示语法错误
如果需要运行时也做防护,可以结合上面的剩余参数判断逻辑一起用。
内容的提问来源于stack exchange,提问作者Swayam Shah
相关产品推荐
相关产品推荐

