functions and arguments.length; passing unknown number of arguments

Discussion in 'Javascript' started by oldyork90, Sep 24, 2008.

  1. oldyork90

    oldyork90 Guest

    I'm going thru code and have never seen this before
    http://www.webreference.com/programming/javascript/mk/column2/3.html


    Look at function CreateDragContainer() on line 25. It has no
    arguments defined and depends on a function property named arguments
    to process its input. I poked around and found this is deprecated.

    How do you pass an unknown number of arguments to a function? Put
    them in an array?

    Thanks.
     
    oldyork90, Sep 24, 2008
    #1
    1. Advertising

  2. oldyork90 <> writes:

    > I'm going thru code and have never seen this before
    > http://www.webreference.com/programming/javascript/mk/column2/3.html
    >
    >
    > Look at function CreateDragContainer() on line 25. It has no
    > arguments defined and depends on a function property named arguments
    > to process its input. I poked around and found this is deprecated.


    Function.arguments is deprecated. The automically instantiated variable
    arguments is not.

    > How do you pass an unknown number of arguments to a function? Put
    > them in an array?


    I use the arguments variable.

    --
    Joost Diepenmaat | blog: http://joost.zeekat.nl/ | work: http://zeekat.nl/
     
    Joost Diepenmaat, Sep 24, 2008
    #2
    1. Advertising

  3. oldyork90

    SAM Guest

    Le 9/24/08 9:23 PM, oldyork90 a écrit :
    >
    > How do you pass an unknown number of arguments to a function? Put
    > them in an array?


    function hello() {
    for(var i=0; i< arguments.length; i++) alert(arguments);
    }

    hello('hello guy');
    hello('hello','old boy');
    hello('hello','Old Rock','the 90th');

    var t1 = 'Hello';
    var t2 = 'man';
    hello(t1, t2);


    Is there really necessary to put previously the arguments in an array ?


    var or = ['hello','Old Rock','the 90th'];

    function salut() {
    arguments = arguments.length==1?
    arguments[0].toString().split(',') : arguments;
    for(var i=0; i< arguments.length; i++) alert(arguments);
    }

    salut(or);

    --
    sm
     
    SAM, Sep 24, 2008
    #3
  4. oldyork90

    Kiran Makam Guest

    Re: functions and arguments.length; passing unknown number ofarguments

    On Sep 25, 12:23 am, oldyork90 <> wrote:

    > How do you pass an unknown number of arguments to a function? Put
    > them in an array?


    You can use an object (with necessary properties initialized) to pass
    the arguments.
    For example, if your function requires 5 arguments: arg1, arg2...arg5

    function myFn(oArgs){
    var arg1 = oArgs.arg1;

    //initialize if the arg is not passed
    var arg2 = (oArgs.arg2 == undefined)? "myDefaultValue" : oArgs.arg2;
    }

    //function call
    myFn(
    {
    arg1: "xxx",
    arg2: "yyy",
    ...
    arg5: "zzz"
    }
    );

    - Kiran Makam
     
    Kiran Makam, Sep 25, 2008
    #4
  5. Joost Diepenmaat wrote:
    > Function.arguments is deprecated. The automically instantiated variable
    > arguments is not.
    >
    >> How do you pass an unknown number of arguments to a function? Put
    >> them in an array?

    >
    > I use the arguments variable.


    `arguments' is a property of the Activation/Variable Object of a local
    execution context, but not a variable. And no, that is not a contradiction :)


    PointedEars
    --
    Prototype.js was written by people who don't know javascript for people
    who don't know javascript. People who don't know javascript are not
    the best source of advice on designing systems that use javascript.
    -- Richard Cornford, cljs, <f806at$ail$1$>
     
    Thomas 'PointedEars' Lahn, Sep 26, 2008
    #5
  6. Thomas 'PointedEars' Lahn <> writes:

    > Joost Diepenmaat wrote:
    >> Function.arguments is deprecated. The automically instantiated variable
    >> arguments is not.
    >>
    >>> How do you pass an unknown number of arguments to a function? Put
    >>> them in an array?

    >>
    >> I use the arguments variable.

    >
    > `arguments' is a property of the Activation/Variable Object of a local
    > execution context, but not a variable. And no, that is not a contradiction :)


    In the interest of academics; is there any way to tell the difference
    using javascript code?

    --
    Joost Diepenmaat | blog: http://joost.zeekat.nl/ | work: http://zeekat.nl/
     
    Joost Diepenmaat, Sep 26, 2008
    #6
  7. Joost Diepenmaat wrote:
    > Thomas 'PointedEars' Lahn <> writes:
    >> Joost Diepenmaat wrote:
    >>> Function.arguments is deprecated. The automically instantiated variable
    >>> arguments is not.
    >>>
    >>>> How do you pass an unknown number of arguments to a function? Put
    >>>> them in an array?
    >>> I use the arguments variable.

    >> `arguments' is a property of the Activation/Variable Object of a local
    >> execution context, but not a variable. And no, that is not a contradiction :)

    >
    > In the interest of academics; is there any way to tell the difference
    > using javascript code?


    Quick hack for testing if `x' was declared a local variable:

    /\bvar\s+([A-Za-z_$][\w$]*\s*,\s*)*x\b/.test(arguments.callee)

    This should be adapted for Unicode-aware implementations, see ES3F 12.2 and
    7.5.3.


    PointedEars
    --
    Prototype.js was written by people who don't know javascript for people
    who don't know javascript. People who don't know javascript are not
    the best source of advice on designing systems that use javascript.
    -- Richard Cornford, cljs, <f806at$ail$1$>
     
    Thomas 'PointedEars' Lahn, Sep 27, 2008
    #7
  8. Thomas 'PointedEars' Lahn wrote:
    > Quick hack for testing if `x' was declared a local variable:
    >
    > /\bvar\s+([A-Za-z_$][\w$]*\s*,\s*)*x\b/.test(arguments.callee)
    >
    > This should be adapted for Unicode-aware implementations, see ES3F 12.2 and
    > 7.5.3.

    ^^^^^
    I meant the following section, 7.6 ("Identifiers"), of course.

    Thank you and good night ;-)


    PointedEars
    --
    var bugRiddenCrashPronePieceOfJunk = (
    navigator.userAgent.indexOf('MSIE 5') != -1
    && navigator.userAgent.indexOf('Mac') != -1
    ) // Plone, register_function.js:16
     
    Thomas 'PointedEars' Lahn, Sep 27, 2008
    #8
  9. oldyork90

    Jorge Guest

    Re: functions and arguments.length; passing unknown number ofarguments

    On Sep 27, 1:12 am, Thomas 'PointedEars' Lahn <>
    wrote:
    > Joost Diepenmaat wrote:
    > > Thomas 'PointedEars' Lahn <> writes:
    > >> Joost Diepenmaat wrote:
    > >>> Function.arguments is deprecated. The automically instantiated variable
    > >>> arguments is not.

    >
    > >>>> How do you pass an unknown number of arguments to a function?  Put
    > >>>> them in an array?
    > >>> I use the arguments variable.
    > >> `arguments' is a property of the Activation/Variable Object of a local
    > >> execution context, but not a variable.  And no, that is not a contradiction :)

    >
    > > In the interest of academics; is there any way to tell the difference
    > > using javascript code?

    >
    > Quick hack for testing if `x' was declared a local variable:
    >
    >   /\bvar\s+([A-Za-z_$][\w$]*\s*,\s*)*x\b/.test(arguments.callee)
    >


    Parsing the source ? come on ! That's not serious !

    Try to see a bit further than your own nose. Activation objects are
    notional entities. They could as well have called them 'magically
    bound variables'.

    --
    Jorge.
     
    Jorge, Sep 27, 2008
    #9
  10. Re: functions and arguments.length; passing unknown number of arguments

    Jorge wrote:
    > Thomas 'PointedEars' Lahn wrote:
    >> Joost Diepenmaat wrote:
    >>> Thomas 'PointedEars' Lahn <> writes:
    >>>> Joost Diepenmaat wrote:
    >>>>> Function.arguments is deprecated. The automically instantiated variable
    >>>>> arguments is not.
    >>>>>> How do you pass an unknown number of arguments to a function? Put
    >>>>>> them in an array?
    >>>>> I use the arguments variable.
    >>>> `arguments' is a property of the Activation/Variable Object of a local
    >>>> execution context, but not a variable. And no, that is not a contradiction :)
    >>> In the interest of academics; is there any way to tell the difference
    >>> using javascript code?

    >> Quick hack for testing if `x' was declared a local variable:
    >>
    >> /\bvar\s+([A-Za-z_$][\w$]*\s*,\s*)*x\b/.test(arguments.callee)

    >
    > Parsing the source ? come on ! That's not serious !


    If you have a better idea, then post it. If not, shut up.

    > Try to see a bit further than your own nose. Activation objects are
    > notional entities.


    Whatever you might mean by "notional", Activation Objects exist and are part
    of the scope chain of function code (ES3F, 10.2.3). Furthermore, "The
    activation object is then used as the variable object for the purposes of
    variable instantiation." (10.1.6) Unfortunately, the Activation/Variable
    Object cannot be referred to, hence this quick hack.

    > They could as well have called them 'magically bound variables'.


    You could as well be called an incompetent fool, but I will assume in your
    favor you are just tired or drunk or both right now. So go to bed, please.


    PointedEars
    --
    Prototype.js was written by people who don't know javascript for people
    who don't know javascript. People who don't know javascript are not
    the best source of advice on designing systems that use javascript.
    -- Richard Cornford, cljs, <f806at$ail$1$>
     
    Thomas 'PointedEars' Lahn, Sep 27, 2008
    #10
  11. oldyork90

    Jorge Guest

    Re: functions and arguments.length; passing unknown number ofarguments

    On Sep 27, 3:58 am, Thomas 'PointedEars' Lahn <>
    wrote:

    > Whatever you might mean by "notional", Activation Objects exist and are part
    > of the scope chain of function code (ES3F, 10.2.3).  Furthermore, "The
    > activation object is then used as the variable object for the purposes of
    > variable instantiation." (10.1.6)  Unfortunately, the Activation/Variable
    > Object cannot be referred to, hence this quick hack.
    >


    And rest assured that nearly everything everywhere nowadays is
    (internally) held in objects as well... and ? 'If it looks like a duck
    and quacks like a duck, it must be a duck' : but this object of yours,
    from a JS programmer point of view, not only doesn't quack like an
    object, it doesn't even look like one because it's invisible. They
    might have as well written the spec in another way using a different
    language and you would not be here arguing about its existence. In
    this sense it's 'notional only'.

    --
    Jorge.
     
    Jorge, Sep 27, 2008
    #11
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. M. Clift
    Replies:
    8
    Views:
    419
    M. Clift
    Aug 19, 2004
  2. David Portabella
    Replies:
    0
    Views:
    373
    David Portabella
    Jun 13, 2008
  3. InuY4sha
    Replies:
    6
    Views:
    588
    Antoninus Twink
    Feb 6, 2009
  4. srdgame
    Replies:
    5
    Views:
    501
    srdgame
    Mar 6, 2009
  5. Vincent Arnoux
    Replies:
    1
    Views:
    256
    Arnaud Bergeron
    Aug 11, 2006
Loading...

Share This Page