Hapijs Glue'撰写'功能不应该工作,但确实如此。怎么样?

时间:2016-09-19 14:53:01

标签: javascript hapijs

任何人都可以向我解释这是如何工作的吗?我看到一个带有一个参数的函数,只要它有"小于或等于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

这是如何工作的?我误读了吗?

1 个答案:

答案 0 :(得分:0)

在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的弱类型特性是一致的:函数也是松散类型的,因为它们的签名只是它们的名字。

所有函数都是事实上 variadic那样,它本身就允许overloading的原则,因为你的函数可能会根据参数的数量和性质而有所不同。 (PHP,也是松散类型,具有相同的机制。)

请参阅the arguments object definition,它会告诉您有关此功能的更多信息!