有人能给我解释一下这是怎么回事吗?我看到一个只有一个参数的函数,每当它有“小于或等于3”的参数时,它似乎都会抛出一个错误。
  exports.compose = function (manifest /*, [options], [callback] */) {
  Hoek.assert(arguments.length <= 3, 'Invalid number of arguments');我在这里看到了:
https://github.com/hapijs/glue/blob/67f8331326e11fb91c1ee0c4a99ac6c0ec310f5e/lib/index.js#L38
这是怎么回事?我是不是读错了?
发布于 2016-11-08 17:52:25
在JS中,声明
var f = function (a, b, c) {
  console.log(a+b+c);
};等同于
var f = function () {
  var a = arguments[0];
  var b = arguments[1];
  var c = arguments[2];
  console.log(a+b+c);
};这意味着您命名的参数只是arguments[i]的“昵称”,您可以调用带参数或不带参数的函数:“预期的”(已命名的)参数将简单地为undefined。
与其他语言相反,函数的参数不是其签名的一部分。这使得编码不那么严格,因为您可以执行错误的调用,而不会出现解释器错误。然而,这与JS的弱类型本质是一致的:函数也是一种松散类型,因为它们的签名就是它们的名字。
所有的函数都是这样的,它本质上允许overloading的原则,因为根据参数的数量和性质,你的函数可能会有不同的行为。(PHP也是松散类型的,也具有相同的机制。)
请参阅the arguments object definition,它将告诉您有关此功能的更多信息!
https://stackoverflow.com/questions/39576160
复制相似问题