首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Hapijs Glue 'compose‘函数应该不起作用,但它确实起作用了。多么?

Hapijs Glue 'compose‘函数应该不起作用,但它确实起作用了。多么?
EN

Stack Overflow用户
提问于 2016-09-19 22:53:01
回答 1查看 58关注 0票数 0

有人能给我解释一下这是怎么回事吗?我看到一个只有一个参数的函数,每当它有“小于或等于3”的参数时,它似乎都会抛出一个错误。

代码语言:javascript
运行
复制
  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

这是怎么回事?我是不是读错了?

EN

回答 1

Stack Overflow用户

发布于 2016-11-08 17:52:25

在JS中,声明

代码语言:javascript
运行
复制
var f = function (a, b, c) {
  console.log(a+b+c);
};

等同于

代码语言:javascript
运行
复制
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,它将告诉您有关此功能的更多信息!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39576160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档