任何人都可以向我解释这是如何工作的吗?我看到一个带有一个参数的函数,只要它有"小于或等于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
这是如何工作的?我误读了吗?
答案 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,它会告诉您有关此功能的更多信息!