知识卡片
参数宽松有代价
内容
函数调用时实际参数个数与形式参数个数不匹配不会导致运行时错误:多余参数被忽略,缺失参数被替换为 undefined;对参数值也不做类型检查,任何类型都能传给任何参数。这让接口调用灵活,也让参数错误更晚才在函数体内暴露。发散:公共函数应主动校验关键参数,把语言层面的隐式容错变成显式契约,而不是依赖调用方总是传对。
参考来源
- 位置:《JavaScript语言精粹(修订版)》第4章《函数 Functions》"调用"一节
- 结论依据:原文说明实际参数与形式参数个数不匹配时不报运行时错误(多余忽略、缺失变 undefined),且不对参数值做类型检查,由此推出"参数宽松换来了灵活性,但把错误检测推迟到了函数体内部"的结论。
- 原始内容:当实际参数(arguments)的个数与形式参数(parameters)的个数不匹配时,不会导致运行时错误。如果实际参数值过多了,超出的参数值会被忽略。如果实际参数值过少,缺失的值会被替换为undefined。对参数值不会进行类型检查:任何类型的值都可以被传递给任何参数。