gpt4 book ai didi

JavaScript 非参数化函数仍然能够获取参数

转载 作者:行者123 更新时间:2023-11-30 09:44:08 27 4
gpt4 key购买 nike

据我所知,在C#、java等大多数编程语言中都是通用的。方法或函数需要有参数才能传递变量。

class Program
{
static void Main(string[] args)
{

Console.WriteLine(add(12,48));
Console.ReadKey();
}


static int add(int x, int y)
{
return x + y;
}
}

但是,如果我尝试在不带参数的情况下调用此方法,则会出现错误。

add();

另一方面,如果我使用附加值调用此方法,我也会收到错误消息。

add(12,16,52);

当涉及到 JavaScript 时,情况就不同了。可以将变量传递给非参数化函数。

function add() {

var sum = 0;

for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
sum += arguments[i];
}

return sum;
}

测试

> add(15,25,5,40)
15
25
5
40
< 85

我想知道,“这是优势吗?”或“这是一种泄漏吗?”。

如果这是一个优势,那为什么还要在 JavaScript 函数中添加参数呢?

如果这是一个泄漏,那么我如何才能将我的 JavaScript 函数从这个泄漏中拉出来?

非常感谢大家。

最佳答案

它绝对可以用作优势

在 JavaScript 中,所有函数本质上都是 variadic ,这意味着它们接受可变数量的参数。

您无法阻止这种情况的发生。您可以做的是检查函数内的参数数量以区分不同的调用。

ES5

在该语言的旧版本(ES2015 之前)中,您必须使用 arguments object为了这张支票。 arguments 对象被隐式注入(inject)到所有函数中,并且行为类似于数组,但不是数组(这会阻止您使用数组方法直接在 arguments 上)。请注意,使用 arguments因此,如今通常不受欢迎,因为有更好的选择。

function a() {
console.log(arguments.length);
}

ES2015+

从 ES2015 开始,你通常会使用 rest parameters检查传递的参数数量。一大优势是剩余参数实际上是真正的数组,并且它们是明确定义的。

因为它们是真正的数组,你可以像.map这样调用数组方法直接在你的休息参数上,这将需要更多的努力与旧的 arguments方法。

function a(...args) {
console.log(args.length);
}

函数.length

另一个有用的信息是 Function.length 返回为函数指定的实际参数的数量。例如:

const three = (a, b, c) => {}
console.log(three.length); // 3

关于JavaScript 非参数化函数仍然能够获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39674200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com