Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

But in Java (and similar), you have to be explicit about varargs. In JavaScript, every function supports varargs. This will run just fine:

    function print(arg) {
        console.log(arg);
    }
    print("a", "b", "c");
It’ll only output "a", obviously. In fact, this will run just fine too:

    print();
You’ll get "undefined" in the console, but it’ll work.

JavaScript’s nature is that arguments are in the "arguments" pseudo-array, and the parameters are just fancy names for different values in "arguments". See:

    function count() {
        console.log(arguments.length);
    }
    count();
    count("a");
    count("a", "b");
In order, you’ll get: 0, 1, and 2. Despite the fact that "count" has no parameters in the definition.

In the first function ("print"), "arg" is just syntax sugar for "arguments[0]".

What I’m getting at is: in C, Java, etc., the compiler knows what is a varargs function and what isn’t. In JavaScript, the interpreter/compiler doesn’t and has to assume everything is.



> In the first function ("print"), "arg" is just syntax sugar for "arguments[0]".

So much so that they reflect one another: you can set `arguments[0]` and retrieve that value from `arg`, and the other way around:

    function foo(arg0, arg1) {
      arg0 = "foo";
      arguments[1] = "bar";
      console.log(Array.from(arguments), arg0, arg1);
    }
    foo(1, 2)
will log

    [ "foo", "bar" ] foo bar
Although in reality optimising engines treat `arguments` as a keyword of sorts: they will not reify the object if they don't have to. However this meant they had to deoptimise a fair bit before the "spread" arguments arrived as that was how you'd call your "super".



Hence, “pseudo-array”


Great explanation and I think you are right for Java, Kotlin, etc. But what about dynamic languages on the JVM such as GraalJS, groovy, etc?




Consider applying for YC's Winter 2026 batch! Applications are open till Nov 10

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: