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

JavaScript非参数化函数仍然能够获取参数,javascript,Javascript,据我所知,在大多数编程语言中,如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; } }

据我所知,在大多数编程语言中,如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;
}
函数添加(){
var总和=0;
for(var i=0;i
试验

>添加(15,25,5,40)
15
25
5.
40
< 85
我想知道,“这是一种优势吗?”或者“这是一种泄密吗?”

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

如果它是一个漏洞,那么我如何从这个漏洞中延长我的JavaScript函数呢

非常感谢你们所有人

对象存在于每个(遗留)函数中。这是故意的。即使给定了命名参数,空参数列表也不是错误。该值是刚刚定义的
未定义的

为了保护函数,可以检查长度并抛出错误

函数添加(){
如果(arguments.length>0){
抛出新错误('Get参数,其中没有人期望')
}
log('add()调用');
}
添加();
加(0)对象存在于每个(遗留)函数中。这是故意的。即使给定了命名参数,空参数列表也不是错误。该值是刚刚定义的
未定义的

为了保护函数,可以检查长度并抛出错误

函数添加(){
如果(arguments.length>0){
抛出新错误('Get参数,其中没有人期望')
}
log('add()调用');
}
添加();
加(0)首先,Java和C#是静态类型的语言,JavaScript是动态类型的-这是它们之间的根本区别,所以这就是函数“behaiour”不同的原因

你可以在上面读到:

JavaScript函数有一个称为arguments对象的内置对象

因此,毫无疑问,这不是一个漏洞。

首先,Java和C#是静态类型的语言,JavaScript是动态类型的——这是它们之间的根本区别,所以这就是函数“behaiour”不同的原因

你可以在上面读到:

JavaScript函数有一个称为arguments对象的内置对象


因此,毫无疑问,它不是一个漏洞。

它绝对可以被用作一个优势

在JavaScript中,所有函数都是固有的,这意味着它们接受可变数量的参数

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

ES5 在旧版本的语言(ES2015之前)中,您必须使用进行此检查。arguments对象隐式注入到所有函数中,的行为类似于数组,但不是数组(这阻止您直接对
参数
)使用数组方法)。请注意,使用
参数
现在通常是不受欢迎的,因为有更好的选择

function a() {
    console.log(arguments.length);
}
ES2015+ 从ES2015及以上版本,您通常会使用检查传递的参数数量。一个很大的优势是rest参数实际上是实数组,并且它们是显式定义的

由于它们是真实的数组,您可以直接在rest参数上调用数组方法,如
.map
,这需要使用较旧的
参数
方法进行更多的工作

function a(...args) {
    console.log(args.length);
}
函数长度 要知道的另一件有用的事情是返回为函数指定的实际参数量。例如:

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

它绝对可以用作一种优势

在JavaScript中,所有函数都是固有的,这意味着它们接受可变数量的参数

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

ES5 在旧版本的语言(ES2015之前)中,您必须使用进行此检查。arguments对象隐式注入到所有函数中,的行为类似于数组,但不是数组(这阻止您直接对
参数
)使用数组方法)。请注意,使用
参数
现在通常是不受欢迎的,因为有更好的选择

function a() {
    console.log(arguments.length);
}
ES2015+ 从ES2015及以上版本,您通常会使用检查传递的参数数量。一个很大的优势是rest参数实际上是实数组,并且它们是显式定义的

由于它们是真实的数组,您可以直接在rest参数上调用数组方法,如
.map
,这需要使用较旧的
参数
方法进行更多的工作

function a(...args) {
    console.log(args.length);
}
函数长度 要知道的另一件有用的事情是返回为函数指定的实际参数量。例如:

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

它们是你传递的实际值,称为参数。它们是你传递的实际值,称为参数。这不再是真的了。箭头函数(胖箭头)没有
参数
对象;他们也没有
这个
对象。也许他们在幕后有一个,但在你的代码中无法访问它。这不再是真的了。箭头函数(胖箭头)没有
参数
对象;他们也没有
这个
对象。也许他们在幕后有一个,但是