Ð JavaScript лÑÐ±Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзвана Ñ Ð¿ÑоизволÑнÑм колиÑеÑÑвом аÑгÑменÑов.
ÐапÑимеÑ:
function go(a,b) {
alert("a="+a+", b="+b);
}
go(1); // a=1, b=undefined
go(1,2); // a=1, b=2
go(1,2,3); // a=1, b=2, ÑÑеÑий аÑгÑÐ¼ÐµÐ½Ñ Ð½Ðµ вÑÐ·Ð¾Ð²ÐµÑ Ð¾ÑибкÑ
РнекоÑоÑÑÑ ÑзÑÐºÐ°Ñ Ð¿ÑогÑаммиÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑоздаÑÑ Ð´Ð²Ðµ ÑÑнкÑии Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñм именем, но ÑазнÑм набоÑом аÑгÑменÑов, а пÑи вÑзове инÑеÑпÑеÑаÑÐ¾Ñ Ñам вÑбеÑÐµÑ Ð½ÑжнÑÑ:
function log(a) {
...
}
function log(a, b, c) {
...
}
log(a); // вÑзовеÑÑÑ Ð¿ÐµÑÐ²Ð°Ñ ÑÑнкÑиÑ
log(a, b, c); // вÑзовеÑÑÑ Ð²ÑоÑÐ°Ñ ÑÑнкÑиÑ
ÐÑо назÑваеÑÑÑ Â«Ð¿Ð¾Ð»Ð¸Ð¼Ð¾ÑÑизмом ÑÑнкÑий» или «пеÑегÑÑзкой ÑÑнкÑий». Ð JavaScript ниÑего подобного неÑ.
ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ ÑолÑко одна ÑÑнкÑÐ¸Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ log, коÑоÑÐ°Ñ Ð²ÑзÑваеÑÑÑ Ñ Ð»ÑбÑми аÑгÑменÑами.
Ð Ñже внÑÑÑи она Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑмоÑÑеÑÑ, Ñ Ñем вÑзвана и по-ÑÐ°Ð·Ð½Ð¾Ð¼Ñ Ð¾ÑÑабоÑаÑÑ.
РпÑимеÑе вÑÑе вÑоÑое обÑÑвление log пÑоÑÑо пеÑеопÑÐµÐ´ÐµÐ»Ð¸Ñ Ð¿ÐµÑвое.
ÐоÑÑÑп к «лиÑним» аÑгÑменÑам
Ðак полÑÑиÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð°ÑгÑменÑов, коÑоÑÑÑ Ð½ÐµÑ Ð² ÑпиÑке паÑамеÑÑов?
ÐоÑÑÑп к ним оÑÑÑеÑÑвлÑеÑÑÑ ÑеÑез «пÑевдо-маÑÑив» arguments.
Ðн ÑодеÑÐ¶Ð¸Ñ ÑпиÑок аÑгÑменÑов по номеÑам: arguments[0], arguments[1]â¦, а Ñакже ÑвойÑÑво length.
ÐапÑимеÑ, вÑведем ÑпиÑок вÑÐµÑ Ð°ÑгÑменÑов:
function sayHi() {
for (var i = 0; i < arguments.length; i++) {
alert( "ÐÑивеÑ, " + arguments[i] );
}
}
sayHi("Ðинни", "ÐÑÑаÑок"); // 'ÐÑивеÑ, Ðинни', 'ÐÑивеÑ, ÐÑÑаÑок'
ÐÑе паÑамеÑÑÑ Ð½Ð°Ñ
одÑÑÑÑ Ð² arguments, даже еÑли они еÑÑÑ Ð² ÑпиÑке. Ðод вÑÑе ÑÑабоÑал Ð±Ñ Ñакже, бÑÐ´Ñ ÑÑнкÑÐ¸Ñ Ð¾Ð±ÑÑвлена sayHi(a,b,c).
arguments и паÑамеÑÑамиРÑÑаÑом ÑÑандаÑÑе JavaScript пÑевдо-маÑÑив arguments и пеÑеменнÑе-паÑамеÑÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° одни и Ñе же знаÑениÑ.
Ð ÑезÑлÑÑаÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ arguments влиÑÑÑ Ð½Ð° паÑамеÑÑÑ Ð¸ наобоÑоÑ.
ÐапÑимеÑ:
function f(x) {
arguments[0] = 5; // менÑÐµÑ Ð¿ÐµÑеменнÑÑ x
alert( x ); // 5
}
f(1);
ÐаобоÑоÑ:
function f(x) {
x = 5;
alert( arguments[0] ); // 5, обновлÑннÑй x
}
f(1);
Ð ÑовÑеменной ÑедакÑии ÑÑандаÑÑа ÑÑо поведение изменено. ÐÑгÑменÑÑ Ð¾ÑÐ´ÐµÐ»ÐµÐ½Ñ Ð¾Ñ Ð»Ð¾ÐºÐ°Ð»ÑнÑÑ Ð¿ÐµÑеменнÑÑ :
function f(x) {
"use strict"; // Ð´Ð»Ñ Ð±ÑаÑзеÑов Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой ÑÑÑогого Ñежима
arguments[0] = 5;
alert( x ); // не 5, а 1! ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ "оÑвÑзана" Ð¾Ñ arguments
}
f(1);
ÐÑли Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе ÑÑÑогий Ñежим, Ñо ÑÑÐ¾Ð±Ñ Ð¿ÐµÑеменнÑе не менÑлиÑÑ Â«Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Â», ÑекомендÑеÑÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не изменÑÑÑ arguments.
arguments â ÑÑо не маÑÑив
ЧаÑÑÐ°Ñ Ð¾Ñибка новиÑков â попÑÑка пÑимениÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Array к arguments. ÐÑо невозможно:
function sayHi() {
var a = arguments.shift(); // оÑибка! Ð½ÐµÑ Ñакого меÑода!
}
sayHi(1);
Ðело в Ñом, ÑÑо arguments â ÑÑо не маÑÑив Array.
РдейÑÑвиÑелÑноÑÑи, ÑÑо обÑÑнÑй обÑекÑ, пÑоÑÑо клÑÑи ÑиÑловÑе и еÑÑÑ length. Ðа ÑÑом ÑÑ
одÑÑво заканÑиваеÑÑÑ. ÐикакиÑ
оÑобÑÑ
меÑодов Ñ Ð½ÐµÐ³Ð¾ неÑ, и меÑÐ¾Ð´Ñ Ð¼Ð°ÑÑивов он Ñоже не поддеÑживаеÑ.
ÐпÑоÑем, никÑо не меÑÐ°ÐµÑ ÑделаÑÑ Ð¾Ð±ÑÑнÑй маÑÑив из arguments, напÑÐ¸Ð¼ÐµÑ Ñак:
var args = [];
for (var i = 0; i < arguments.length; i++) {
args[i] = arguments[i];
}
Такие обÑекÑÑ Ð¸Ð½Ð¾Ð³Ð´Ð° назÑваÑÑ Â«ÐºÐ¾Ð»Ð»ÐµÐºÑиÑми» или «пÑевдомаÑÑивами».
ÐÑимеÑ: копиÑование ÑвойÑÑв copy(dst, src1, src2...)
Ðногда вÑÑаÑÑ Ð·Ð°Ð´Ð°Ñа â ÑкопиÑоваÑÑ Ð² ÑÑÑеÑÑвÑÑÑий обÑÐµÐºÑ ÑвойÑÑва из одного или неÑколÑÐºÐ¸Ñ Ð´ÑÑÐ³Ð¸Ñ .
ÐапиÑем Ð´Ð»Ñ ÑÑого ÑÑнкÑÐ¸Ñ copy. Ðна бÑÐ´ÐµÑ ÑабоÑаÑÑ Ñ Ð»ÑбÑм ÑиÑлом аÑгÑменÑов, благодаÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ arguments.
СинÑакÑиÑ:
- copy(dst, src1, src2â¦)
- ÐопиÑÑÐµÑ ÑвойÑÑва из обÑекÑов
src1, src2,...в обÑекÑdst. ÐозвÑаÑÐ°ÐµÑ Ð¿Ð¾Ð»ÑÑивÑийÑÑ Ð¾Ð±ÑекÑ.
ÐÑполÑзование:
-
ÐÐ»Ñ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½ÐµÑколÑÐºÐ¸Ñ Ð¾Ð±ÑекÑов в один:
var vasya = { age: 21, name: 'ÐаÑÑ', surname: 'ÐеÑÑов' }; var user = { isAdmin: false, isEmailConfirmed: true }; var student = { university: 'My university' }; // добавиÑÑ Ðº vasya ÑвойÑÑва из user и student copy(vasya, user, student); alert( vasya.isAdmin ); // false alert( vasya.university ); // My university -
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ð¸ обÑекÑа
user:// ÑкопиÑÑÐµÑ Ð²Ñе ÑвойÑÑва в пÑÑÑой обÑÐµÐºÑ var userClone = copy({}, user);Такой «клон» обÑекÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑигодиÑÑÑÑ Ñам, где Ð¼Ñ Ñ Ð¾Ñим изменÑÑÑ ÐµÐ³Ð¾ ÑвойÑÑва, пÑи ÑÑом не ÑÑÐ¾Ð³Ð°Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ñй обÑекÑ
user.РнаÑей ÑеализаÑии Ð¼Ñ Ð±Ñдем копиÑоваÑÑ ÑолÑко ÑвойÑÑва пеÑвого ÑÑовнÑ, Ñо еÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñе обÑекÑÑ ÐºÐ°Ðº-Ñо оÑобÑм обÑазом не обÑабаÑÑваÑÑÑÑ. ÐпÑоÑем, ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑаÑÑиÑиÑÑ.
Ð Ð²Ð¾Ñ Ð¸ ÑеализаÑиÑ:
function copy() {
var dst = arguments[0];
for (var i = 1; i < arguments.length; i++) {
var arg = arguments[i];
for (var key in arg) {
dst[key] = arg[key];
}
}
return dst;
}
ÐдеÑÑ Ð¿ÐµÑвÑй аÑгÑÐ¼ÐµÐ½Ñ copy â ÑÑо обÑекÑ, в коÑоÑÑй нÑжно копиÑоваÑÑ, он назван dst. ÐÐ»Ñ ÑпÑоÑÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑÑпа к Ð½ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑказаÑÑ ÐµÐ³Ð¾ пÑÑмо в обÑÑвлении ÑÑнкÑии:
function copy(dst) {
// оÑÑалÑнÑе аÑгÑменÑÑ Ð¾ÑÑаÑÑÑÑ Ð±ÐµÐ·ÑмÑннÑми
for (var i = 1; i < arguments.length; i++) {
var arg = arguments[i];
for (var key in arg) {
dst[key] = arg[key];
}
}
return dst;
}
ÐÑгÑменÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ ÑеÑез ||
ÐÑли ÑÑнкÑÐ¸Ñ Ð²Ñзвана Ñ Ð¼ÐµÐ½ÑÑим колиÑеÑÑвом аÑгÑменÑов, Ñем Ñказано, Ñо оÑÑÑÑÑÑвÑÑÑие аÑгÑменÑÑ ÑÑиÑаÑÑÑÑ ÑавнÑми undefined.
ÐаÑаÑÑÑÑ Ð² ÑлÑÑае оÑÑÑÑÑÑÐ²Ð¸Ñ Ð°ÑгÑменÑа Ð¼Ñ Ñ
оÑим пÑиÑвоиÑÑ ÐµÐ¼Ñ Ð½ÐµÐºÐ¾ÑоÑое «ÑÑандаÑÑное» знаÑение или, инаÑе говоÑÑ, знаÑение «по ÑмолÑаниÑ». ÐÑо можно Ñдобно ÑделаÑÑ Ð¿Ñи помоÑи опеÑаÑоÑа логиÑеÑкое ÐÐÐ ||.
ÐапÑимеÑ, ÑÑнкÑÐ¸Ñ showWarning, опиÑÐ°Ð½Ð½Ð°Ñ Ð½Ð¸Ð¶Ðµ, должна показÑваÑÑ Ð¿ÑедÑпÑеждение. ÐÐ»Ñ ÑÑого она пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑÐ¸Ð½Ñ width, вÑÑоÑÑ height, заголовок title и ÑодеÑжимое contents, но болÑÑÐ°Ñ ÑаÑÑÑ ÑÑиÑ
аÑгÑменÑов необÑзаÑелÑна:
function showWarning(width, height, title, contents) {
width = width || 200; // еÑли не Ñказана width, Ñо width = 200
height = height || 100; // еÑли Ð½ÐµÑ height, Ñо height = 100
title = title || "ÐÑедÑпÑеждение";
//...
}
ÐÑо оÑлиÑно ÑабоÑÐ°ÐµÑ Ð² ÑеÑ
ÑиÑÑаÑиÑÑ
, когда «ноÑмалÑное» знаÑение паÑамеÑÑа в логиÑеÑком конÑекÑÑе оÑлиÑно Ð¾Ñ false. Ркоде вÑÑе, пÑи пеÑедаÑе width = 0 или width = null, опеÑаÑÐ¾Ñ ÐÐÐ Ð·Ð°Ð¼ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ на знаÑение по ÑмолÑаниÑ.
Ð ÑÑо, еÑли Ð¼Ñ Ñ
оÑим иÑполÑзоваÑÑ Ð·Ð½Ð°Ñение по ÑмолÑÐ°Ð½Ð¸Ñ ÑолÑко еÑли width === undefined? Ð ÑÑом ÑлÑÑае опеÑаÑÐ¾Ñ ÐÐÐ Ñже не подойдÑÑ, нÑжно поÑÑавиÑÑ ÑвнÑÑ Ð¿ÑовеÑкÑ:
function showWarning(width, height, title, contents) {
if (width === undefined) width = 200;
if (height === undefined) height = 100;
if (title === undefined) title = "ÐÑедÑпÑеждение";
//...
}
УÑÑаÑевÑее ÑвойÑÑво arguments.callee
arguments.calleeÐÑо ÑвойÑÑво ÑÑÑаÑело, пÑи use strict оно не ÑабоÑаеÑ.
ÐдинÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð¿ÑиÑина, по коÑоÑой оно ÑÑÑ â ÑÑо Ñо, ÑÑо его можно вÑÑÑеÑиÑÑ Ð² ÑÑаÑом коде, поÑÑÐ¾Ð¼Ñ Ð¾ нÑм желаÑелÑно знаÑÑ.
СовÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ ÑпеÑиÑикаÑÐ¸Ñ ÑекомендÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð½Ñе ÑÑнкÑионалÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ (NFE).
Ð ÑÑаÑом ÑÑандаÑÑе JavaScript обÑÐµÐºÑ arguments не ÑолÑко Ñ
Ñанил ÑпиÑок аÑгÑменÑов, но и ÑодеÑжал в ÑвойÑÑве arguments.callee ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²ÑполнÑеÑÑÑ Ð² даннÑй моменÑ.
ÐапÑимеÑ:
function f() {
alert( arguments.callee === f ); // true
}
f();
ÐÑи два пÑимеÑа бÑдÑÑ ÑабоÑаÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾:
// подвÑзов ÑеÑез NFE
var factorial = function f(n) {
return n==1 ? 1 : n*f(n-1);
};
// подвÑзов ÑеÑез arguments.callee
var factorial = function(n) {
return n==1 ? 1 : n*arguments.callee(n-1);
};
Ð ÑÑебнике Ð¼Ñ ÐµÐ³Ð¾ иÑполÑзоваÑÑ Ð½Ðµ бÑдем, оно пÑиведено Ð´Ð»Ñ Ð¾Ð±Ñего ознакомлениÑ.
arguments.callee.caller
УÑÑаÑевÑее ÑвойÑÑво arguments.callee.caller Ñ
ÑÐ°Ð½Ð¸Ñ ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²Ñзвала даннÑÑ.
ÐÑо ÑвойÑÑво бÑло в ÑÑаÑом ÑÑандаÑÑе, пÑи use strict оно не ÑабоÑаеÑ, как и arguments.callee.
Также Ñанее ÑÑÑеÑÑвовало более коÑоÑкое ÑвойÑÑво arguments.caller. Ðо ÑÑо Ñже ÑаÑиÑеÑ, оно даже не кÑоÑÑ-бÑаÑзеÑное. Ð Ð²Ð¾Ñ ÑвойÑÑво arguments.callee.caller поддеÑживаеÑÑÑ Ð²ÐµÐ·Ð´Ðµ, еÑли не иÑполÑзован use strict, поÑÑÐ¾Ð¼Ñ Ð² ÑÑаÑом коде оно вÑÑÑеÑаеÑÑÑ.
ÐÑÐ¸Ð¼ÐµÑ ÑабоÑÑ:
f1();
function f1() {
alert( arguments.callee.caller ); // null, Ð¼ÐµÐ½Ñ Ð²Ñзвали из глобалÑного кода
f2();
}
function f2() {
alert( arguments.callee.caller ); // f1, ÑÑнкÑиÑ, из коÑоÑой Ð¼ÐµÐ½Ñ Ð²Ñзвали
f3();
}
function f3() {
alert( arguments.callee.caller ); // f2, ÑÑнкÑиÑ, из коÑоÑой Ð¼ÐµÐ½Ñ Ð²Ñзвали
}
Ð ÑÑебнике Ð¼Ñ ÑÑо ÑвойÑÑво Ñакже не бÑдем иÑполÑзоваÑÑ.
«ÐменованнÑе аÑгÑменÑÑ»
ÐменованнÑе аÑгÑменÑÑ â алÑÑеÑнаÑÐ¸Ð²Ð½Ð°Ñ ÑеÑ
ника ÑабоÑÑ Ñ Ð°ÑгÑменÑами, коÑоÑÐ°Ñ Ð²Ð¾Ð¾Ð±Ñе не иÑполÑзÑÐµÑ arguments.
ÐекоÑоÑÑе ÑзÑки пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ Ð¿ÐµÑедаÑÑ Ð¿Ð°ÑамеÑÑÑ ÐºÐ°Ðº-Ñо Ñак: f(width=100, height=200), Ñо еÑÑÑ Ð¿Ð¾ именам, а ÑÑо не пеÑедано, ÑеÑ
аÑгÑменÑов неÑ. ÐÑо оÑÐµÐ½Ñ Ñдобно в ÑеÑ
ÑлÑÑаÑÑ
, когда аÑгÑменÑов много, Ñложно запомниÑÑ Ð¸Ñ
поÑÑдок и болÑÑинÑÑво вообÑе не надо пеÑедаваÑÑ, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¾Ð¹Ð´ÑÑ.
Ð¢Ð°ÐºÐ°Ñ ÑиÑÑаÑÐ¸Ñ ÑаÑÑо вÑÑÑеÑаеÑÑÑ Ð² компоненÑÐ°Ñ Ð¸Ð½ÑеÑÑейÑа. ÐапÑимеÑ, Ñ Â«Ð¼ÐµÐ½Ñ» Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼Ð°ÑÑа наÑÑÑоек оÑобÑажениÑ, коÑоÑÑе можно «подкÑÑÑиÑÑ» но обÑÑно нÑжно пеÑедаÑÑ Ð²Ñего один-два главнÑÑ Ð¿Ð°ÑамеÑÑа, а оÑÑалÑнÑе возÑмÑÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ.
Ð JavaScript Ð´Ð»Ñ ÑÑÐ¸Ñ Ñелей иÑполÑзÑеÑÑÑ Ð¿ÐµÑедаÑа аÑгÑменÑов в виде обÑекÑа, а в его ÑвойÑÑÐ²Ð°Ñ Ð¼Ñ Ð¿ÐµÑедаÑм паÑамеÑÑÑ.
ÐолÑÑаеÑÑÑ Ñак:
function showWarning(options) {
var width = options.width || 200; // по ÑмолÑаниÑ
var height = options.height || 100;
var contents = options.contents || "ÐÑедÑпÑеждение";
// ...
}
ÐÑзваÑÑ ÑакÑÑ ÑÑнкÑÐ¸Ñ Ð¾ÑÐµÐ½Ñ Ð»ÐµÐ³ÐºÐ¾. ÐоÑÑаÑоÑно пеÑедаÑÑ Ð¾Ð±ÑÐµÐºÑ Ð°ÑгÑменÑов, Ñказав в нем ÑолÑко нÑжнÑе:
showWarning({
contents: "ÐÑ Ð²Ñзвали ÑÑнкÑиÑ" // и вÑÑ Ð¿Ð¾Ð½ÑÑно!
});
СÑавним ÑÑо Ñ Ð¿ÐµÑедаÑей аÑгÑменÑов ÑеÑез ÑпиÑок:
showWarning(null, null, "ÐÑедÑпÑеждение!");
// мÑÑÐ»Ñ Ð¿ÑогÑаммиÑÑа "а ÑÑо ÑÑо за null, null в наÑале? оÑ
, надо глÑдеÑÑ Ð¾Ð¿Ð¸Ñание ÑÑнкÑии"
Ðе пÑавда ли, обÑÐµÐºÑ â гоÑаздо пÑоÑе и понÑÑнее?
ÐÑÑ Ð¾Ð´Ð¸Ð½ бонÑÑ ÐºÑоме кÑаÑивой запиÑи â возможноÑÑÑ Ð¿Ð¾Ð²ÑоÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа аÑгÑменÑов:
var opts = {
width: 400,
height: 200,
contents: "ТекÑÑ"
};
showWarning(opts);
opts.contents = "ÐÑÑгой ÑекÑÑ";
showWarning(opts); // вÑзваÑÑ Ñ Ð½Ð¾Ð²Ñм ÑекÑÑом, без копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´ÑÑгиÑ
аÑгÑменÑов
ÐменованнÑе аÑгÑменÑÑ Ð¿ÑименÑÑÑÑÑ Ð²Ð¾ Ð¼Ð½Ð¾Ð³Ð¸Ñ JavaScript-ÑÑеймвоÑÐºÐ°Ñ .
ÐÑого
- ÐолнÑй ÑпиÑок аÑгÑменÑов, Ñ ÐºÐ¾ÑоÑÑми вÑзвана ÑÑнкÑиÑ, доÑÑÑпен ÑеÑез
arguments. - ÐÑо пÑевдомаÑÑив, Ñо еÑÑÑ Ð¾Ð±ÑекÑ, коÑоÑÑй поÑ
ож на маÑÑив, в нÑм еÑÑÑ Ð½ÑмеÑованнÑе ÑвойÑÑва и
length, но меÑодов маÑÑива Ñ Ð½ÐµÐ³Ð¾ неÑ. - Ð ÑÑаÑом ÑÑандаÑÑе бÑло ÑвойÑÑво
arguments.calleeÑо ÑÑÑлкой на ÑекÑÑÑÑ ÑÑнкÑиÑ, а Ñакже ÑвойÑÑвоarguments.callee.caller, ÑодеÑжаÑее ÑÑÑÐ»ÐºÑ Ð½Ð° ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²Ñзвала даннÑÑ. ÐÑи ÑвойÑÑва ÑÑÑаÑели, пÑиuse strictобÑаÑение к ним пÑиведÑÑ Ðº оÑибке. - ÐÐ»Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð°ÑгÑменÑов по ÑмолÑаниÑ, в ÑеÑ
ÑлÑÑаÑÑ
, когда они заведомо не
false, Ñдобен опеÑаÑоÑ||.
Ð ÑеÑ
ÑлÑÑаÑÑ
, когда возможнÑÑ
аÑгÑменÑов много и, в оÑобенноÑÑи, когда болÑÑинÑÑво иÑ
имеÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ, вмеÑÑо ÑабоÑÑ Ñ arguments оÑганизÑÑÑ Ð¿ÐµÑедаÑÑ Ð´Ð°Ð½Ð½ÑÑ
ÑеÑез обÑекÑ, коÑоÑÑй как пÑавило назÑваÑÑ options.
Ðозможен и гибÑиднÑй подÑ
од, пÑи коÑоÑом пеÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð¾Ð±ÑзаÑелен, а вÑоÑой â options, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð²ÑевозможнÑе дополниÑелÑнÑе паÑамеÑÑÑ:
function showMessage(text, options) {
// показаÑÑ ÑообÑение text, наÑÑÑойки показа ÑÐºÐ°Ð·Ð°Ð½Ñ Ð² options
}
ÐомменÑаÑии
<code>, Ð´Ð»Ñ Ð½ÐµÑколÑÐºÐ¸Ñ ÑÑÑок кода — Ñег<pre>, еÑли болÑÑе 10 ÑÑÑок — ÑÑÑÐ»ÐºÑ Ð½Ð° пеÑоÑниÑÑ (plnkr, JSBin, codepenâ¦)