arguments
рдПрдХ рдмрд╣реБрдд рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд╛рдд рд╣реИ рдЬреЛ рд╢реБрд░реБрдЖрддреА рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╢реМрдХреАрдиреЛрдВ рдХреЛ рд╣реА рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рдПрдХ рд╕рд░рдгреА рдХреА рддрд░рд╣ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдЧрд▓рдд" рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдореИрдВ TypeHinting, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реНрдХ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд┐рд╖рдп рдкрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
(function (foo, bar) { console.log(typeof arguments);
рдФрд░ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рднреА рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ
function test (foo, bar) { Args(arguments).defaults(100, 100); return [foo, bar]; }; test( );
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╡рд┐рд╖рдп рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдП рдЧрдП рдХрдИ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╣реИрдВред рдореБрдЭреЗ рдЦреБрдж рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЙрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реВрдВрдЧрд╛ рдФрд░ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдиреНрд╣реЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рдирд╣реАрдВ рджреВрдВрдЧрд╛ред
рддрд░реНрдХ рдХреНрдпрд╛ рд╣реИрдВ
рдпрд╣ рдПрдХ рд╣реИрд╢ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рд╣реИрд╢ рдХреА рддрд░рд╣
var object = {}
(function () { console.log( typeof arguments,
рдЗрд╕рд╕реЗ рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдирд╛ рд╕рд░рд▓ рд╣реИ:
var array = Array.prototype.slice.call(arguments, 0);
рд╣рдо
arguments
рдУрд░ рд╕реЗ рдРрд░реЗ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ
slice
рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВред
рддрд░реНрдХреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ
arguments.length
arguments.length
- рдлрд╝рдВрдХреНрд╢рди рдХреЛ рджрд┐рдП рдЧрдП рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
var count = function () { console.log(arguments.length); }; count();
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдПрдХ
length
рдЧреБрдг рднреА рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╣реЗрдбрд░ рдореЗрдВ рдХрд┐рддрдиреЗ рддрддреНрд╡ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ:
function one (foo) {}; function three (foo, bar, qux) {}; console.log( one.length);
arguments.callee
arguments.callee
- рдлрдВрдХреНрд╢рди рдХрд╛ рдПрдХ рд▓рд┐рдВрдХред
function foo () { console.log(arguments.callee === foo);
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рддрддреНрд╡реЛрдВ рдХреА рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ:
function test (foo, bar, qux) { return arguments.callee.length === arguments.length; } test(1);
рддрд░реНрдХ рдореЗрдВ рддрд░реНрдХ
arguments
рдореЗрдВ рдкрд╛рд░рд┐рдд рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
function test (foo, bar) { console.log(foo, bar);
рдЕрдм рджрд┐рд▓рдЪрд╕реНрдк рднрд╛рдЧ рдХреЗ рд▓рд┐рдПред рдХрдИ рд▓реЛрдЧ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рддрд░реНрдХреЛрдВ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджрд░реНрдн рд╣реЛрддреЗ рд╣реИрдВ, рдореВрд▓реНрдп рдирд╣реАрдВ, рдФрд░ рддрд░реНрдХреЛрдВ рд╕реЗ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ:
(function (foo) { arguments[0] = 42; console.log(foo);
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдиреЗрдХреНрд╢рди рдХрд╛рдлреА рдордЬрдмреВрдд рд╣реИ:
function foo (qux) { change(arguments); return qux; }; function change(a) { a[0] = 42; } foo(10);
рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЪрд░ рд╣реИрдВред" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, php:
function ($foo = 30, $bar = 'test') { var_dump($foo); var_dump($bar); }
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
function (foo, bar) { if (typeof foo === 'undefined') foo = 30; if (typeof bar === 'undefined') bar = 'test'; console.log(foo, bar); }
arguments
рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж
arguments
рдЖрдк рдПрдХ рд╕реБрдВрджрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
function test(foo, bar) { Args(arguments).defaults(30, 'test'); console.log(foo, bar) } test(); // 30, 'test'
рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
function Args (args) { if (this instanceof Args) { this.args = args; } else {
рдЗрд╕реА рддрд░рд╣, рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
function test(foo) { Args(arguments) .defaults(10) .cast(Number); console.log(foo) } test('0100'); // 100
рдпрд╛ рдЯрд╛рдЗрдк рд╣рд┐рдВрдЯрд┐рдВрдЧ:
function test(foo, bar) { Args(arguments).types(Foo, Bar);
рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ - рдпрд╣ рд╕рдВрджреЗрд╢ рдХрд┐ рд╕рднреА рддрд░реНрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ:
function test (foo, bar, qux) { Args(arguments).allRequired(); } test(1,2,3); // success test(1,2); // Error: 3 args required, 2 given
рдирд┐рд╖реНрдХрд░реНрд╖
рдореИрдВрдиреЗ рдЗрди рд╕рднреА рд╡рд┐рдЪрд╛рд░реЛрдВ рдФрд░ рдЕрд╡рд╕рд░реЛрдВ (рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ) рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ
рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ -
Args.js.рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдЪреАрдЬреЗрдВ (рдЬреИрд╕реЗ рдЯрд╛рдЗрдкрд╣рд┐рдиреНрдЯрд┐рдВрдЧ) рднрд╛рд╖рд╛ рдХреА рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреВрдХ рдПрдХ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬ рд╣реИ, рдЖрдИрдПрдордПрдЪрдУред
рдЕрднреА рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╣реИ, рдФрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд╣реАрдВ рдХрд┐ рдЖрдк рд╕рд┐рд░реНрдл рдПрдХ рд╕реБрдВрджрд░ рднрд╛рд╖рд╛ рд╕реЗ рд╕реА # рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред
рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛, рдХреЛрдб рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд░рдирд╛, рдХреБрдЫ рдЬреЛрдбрд╝реЗ рдвреВрдВрдврдирд╛ рдФрд░ рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рдХрд░рдирд╛)
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рддреАрди рд▓реЛрдХрдкреНрд░рд┐рдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ (рдЖрдИрдИ,
рдПрдлрдПрдХреНрд╕ , рдУрдкреЗрд░рд╛) рдореЗрдВ рдПрдХ рдмрдЧ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ
рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ , рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рдЪреАрдЬ рдиреЗ рдХреЗрд╡рд▓ рдХреНрд░реЛрдо рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ (рдареАрдХ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдиреЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛)ред рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рд╕рд╛рде рд╣рд▓ рдХрд░реЗрдВрдЧреЗред
UPD : рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рдПрдХ рдХреНрд░реЛрдо рдмрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╕реБрдЦрдж рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж
рдЬрдореИрдХрд╛