Baseline Widely available *
ÐбÑÐµÐºÑ arguments
â ÑÑо подобнÑй маÑÑÐ¸Ð²Ñ Ð¾Ð±ÑекÑ, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð°ÑгÑменÑÑ, пеÑеданнÑе в ÑÑнкÑиÑ.
ÐÑимеÑание: ÐÑли Ð²Ñ Ð¿Ð¸ÑеÑе ES6-ÑовмеÑÑимÑй код, Ñо лÑÑÑе иÑполÑзоваÑÑ Ð¾ÑÑаÑоÑнÑе паÑамеÑÑÑ.
ÐÑимеÑание: "ÐодобнÑй маÑÑивÑ" ознаÑаеÑ, ÑÑо arguments
Ð¸Ð¼ÐµÐµÑ ÑвойÑÑво length
, а ÑлеменÑÑ Ð¸Ð½Ð´ÐµÐºÑиÑÑÑÑÑÑ Ð½Ð°ÑÐ¸Ð½Ð°Ñ Ñ Ð½ÑлÑ. Ðо пÑи ÑÑом он не Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº вÑÑÑоеннÑм меÑодам Array
, Ñаким как forEach()
или map()
. ÐодÑобнее об ÑÑом в §ÐпиÑании.
function func1(a, b, c) {
console.log(arguments[0]);
// Expected output: 1
console.log(arguments[1]);
// Expected output: 2
console.log(arguments[2]);
// Expected output: 3
}
func1(1, 2, 3);
СинÑакÑÐ¸Ñ ÐпиÑание
ÐбÑÐµÐºÑ arguments
- ÑÑо локалÑÐ½Ð°Ñ Ð¿ÐµÑеменнаÑ, доÑÑÑÐ¿Ð½Ð°Ñ Ð²Ð½ÑÑÑи лÑбой (неÑÑÑелоÑной) ÑÑнкÑии. ÐбÑÐµÐºÑ arguments
позволÑÐµÑ ÑÑÑлаÑÑÑÑ Ð½Ð° аÑгÑменÑÑ ÑÑнкÑии внÑÑÑи неÑ. Ðн ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· пеÑеданнÑÑ
в ÑÑнкÑÐ¸Ñ Ð°ÑгÑменÑов, индекÑаÑÐ¸Ñ Ð½Ð°ÑинаеÑÑÑ Ñ 0. ÐапÑимеÑ, еÑли в ÑÑнкÑÐ¸Ñ Ð±Ñло пеÑедано 3 аÑгÑменÑа, обÑаÑиÑÑÑÑ Ðº ним можно ÑледÑÑÑим обÑазом:
arguments[0];
arguments[1];
arguments[2];
ÐÑгÑменÑам Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑиÑвоено знаÑение:
arguments[1] = "new value";
ÐбÑÐµÐºÑ arguments
не ÑвлÑеÑÑÑ Array
. Ðн поÑ
ож на маÑÑив, но не Ð¾Ð±Ð»Ð°Ð´Ð°ÐµÑ Ð½Ð¸ одним из его ÑвойÑÑв, кÑоме length
. ÐапÑимеÑ, Ñ Ð½ÐµÐ³Ð¾ Ð½ÐµÑ Ð¼ÐµÑода pop
. Ðднако, он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑеобÑазован в обÑÑнÑй маÑÑив:
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);
// ES2015
const args = Array.from(arguments);
const args = [...arguments];
ÐÑедÑпÑеждение: ÐÑполÑзование slice
на обÑекÑе arguments
не позволÑÐµÑ ÑделаÑÑ Ð¾Ð¿ÑимизаÑии в некоÑоÑÑÑ
JavaScript движкаÑ
(напÑимеÑ, V8 â подÑобнее). ÐÑли они важнÑ, можно попÑобоваÑÑ Ð²Ð¼ÐµÑÑо ÑÑого ÑоздаÑÑ Ð½Ð¾Ð²Ñй маÑÑив Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñной длиной и заполниÑÑ ÐµÐ³Ð¾ ÑлеменÑами обÑекÑа arguments.
ÐлÑÑеÑнаÑивнÑй ваÑÐ¸Ð°Ð½Ñ â иÑполÑзоваÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑÐ¾Ñ Array
как ÑÑнкÑиÑ:
var args =
arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments);
ÐбÑÐµÐºÑ arguments
можно иÑполÑзоваÑÑ Ð¿Ñи вÑзове ÑÑнкÑии Ñ Ð±Ð¾ÌлÑÑим колиÑеÑÑвом аÑгÑменÑов, Ñем бÑло пÑедÑÑмоÑÑено в ÐµÑ Ð¾Ð±ÑÑвлении. Такой ÑпоÑоб Ñдобен Ð´Ð»Ñ ÑÑнкÑий, в коÑоÑÑе допÑÑÑимо пеÑедаваÑÑ Ð¿ÐµÑеменное колиÑеÑÑво аÑгÑменÑов. Ðожно воÑполÑзоваÑÑÑÑ arguments.length
, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво пеÑеданнÑÑ
в ÑÑнкÑÐ¸Ñ Ð°ÑгÑменÑов, а заÑем обÑабоÑаÑÑ ÐºÐ°Ð¶Ð´Ñй из ниÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¾Ð±ÑекÑа arguments
. ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво паÑамеÑÑов ÑÑнкÑии, опиÑаннÑÑ
в ÐµÑ ÑигнаÑÑÑе, можно иÑполÑзоваÑÑ ÑвойÑÑво Function.length
.
typeof
Ñ Ð¾Ð±ÑекÑом arguments
ÐÑименение опеÑаÑоÑа typeof
к arguments
веÑнÑÑ 'object'.
console.log(typeof arguments); // 'object'
ÐпÑеделение Ñипов аÑгÑменÑов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñполнено пÑименением опеÑаÑоÑа typeof
и индекÑаÑией.
// вÑÐ²ÐµÐ´ÐµÑ Ñип пеÑвого аÑгÑменÑа console.log(typeof arguments[0]);ÐÑполÑзование опеÑаÑоÑа ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±ÑекÑа
arguments
Ðак и Ñ Ð¾Ð±ÑÑнÑми маÑÑива-подобнÑми обÑекÑами, Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа arguments
в обÑÑнÑй маÑÑив можно иÑполÑзоваÑÑ Ð¼ÐµÑод Array.from()
или опеÑаÑÐ¾Ñ ÑаÑÑиÑениÑ:
var args = Array.from(arguments);
var args = [...arguments];
СвойÑÑва
arguments.callee
СÑÑлка на ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²ÑполнÑеÑÑÑ Ð² ÑекÑÑий моменÑ.
arguments.caller
СÑÑлка на ÑÑнкÑиÑ, коÑоÑÐ°Ñ Ð²Ñзвала ÑÑнкÑиÑ, вÑполнÑÑÑÑÑÑÑ Ð² ÑекÑÑий моменÑ.
arguments.length
ÐолиÑеÑÑво пеÑеданнÑÑ Ð² ÑÑнкÑÐ¸Ñ Ð°ÑгÑменÑов.
arguments[@@iterator]
ÐозвÑаÑÐ°ÐµÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ Array Iterator
, ÑодеÑжаÑий знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ индекÑа в маÑÑиве.
ÐаннÑй пÑÐ¸Ð¼ÐµÑ Ð¾Ð¿Ð¸ÑÑÐ²Ð°ÐµÑ ÑÑнкÑиÑ, коÑоÑÐ°Ñ ÑоединÑÐµÑ Ð½ÐµÑколÑко ÑÑÑок. ÐÐ»Ñ ÑÑой ÑÑнкÑии обÑÑвлен ÑолÑко один аÑгÑменÑ, опÑеделÑÑÑий Ñимвол-ÑазделиÑÐµÐ»Ñ ÑоединÑемÑÑ ÑлеменÑов. ФÑнкÑÐ¸Ñ Ð¾Ð¿Ñеделена ÑледÑÑÑим обÑазом:
function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 1);
return args.join(separator);
}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе пеÑедаÑÑ Ð»Ñбое колиÑеÑÑво аÑгÑменÑов в ÑÑÑ ÑÑнкÑиÑ. Ðна ÑоздаÑÑ ÑÑÑокÑ, иÑполÑзÑÑ ÐºÐ°Ð¶Ð´Ñй аÑгÑменÑ:
// возвÑаÑÐ°ÐµÑ "red, orange, blue"
myConcat(", ", "red", "orange", "blue");
// полÑÑÐ°ÐµÑ "elephant; giraffe; lion; cheetah"
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// вÑÐ²Ð¾Ð´Ð¸Ñ "sage. basil. oregano. pepper. parsley"
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
ФÑнкÑиÑ, ÑоздаÑÑÐ°Ñ HTML ÑпиÑки
Рданном пÑимеÑе пÑиведена ÑÑнкÑиÑ, коÑоÑÐ°Ñ ÑоздаÑÑ ÑÑÑÐ¾ÐºÑ Ñ HTML-ÑазмеÑкой Ð´Ð»Ñ ÑпиÑка. ÐдинÑÑвеннÑй ÐµÑ Ð°ÑгÑÐ¼ÐµÐ½Ñ â ÑÑÑока, опÑеделÑÑÑÐ°Ñ Ð²Ð¸Ð´ ÑпиÑка: еÑли его знаÑение Ñавно "u", ÑоÑмиÑÑеÑÑÑ Ð½ÐµÑпоÑÑдоÑеннÑй (маÑкиÑованнÑй) ÑпиÑок, а еÑли "o" â Ñо ÑпоÑÑдоÑеннÑй (нÑмеÑованнÑй):
function list(type) {
var result = "<" + type + "l><li>";
var args = Array.prototype.slice.call(arguments, 1);
result += args.join("</li><li>");
result += "</li></" + type + "l>"; // ÐºÐ¾Ð½ÐµÑ ÑпиÑка
return result;
}
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð»Ñбое колиÑеÑÑво аÑгÑменÑов, а ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ ÐºÐ°Ð¶Ð´Ñй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð² ÑпиÑок заданного пеÑвÑм аÑгÑменÑом Ñипа. ÐапÑимеÑ:
var listHTML = list("u", "One", "Two", "Three");
/* listHTML:
"<ul><li>One</li><li>Two</li><li>Three</li></ul>"
*/
ÐÑÑаÑоÑнÑе, деÑÑÑÑкÑÑÑиÑованнÑе и паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑаниÑ
ÐбÑÐµÐºÑ arguments
Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑовмеÑÑно Ñ Ð¾ÑÑаÑоÑнÑми паÑамеÑÑами, паÑамеÑÑами по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ деÑÑÑÑкÑÑÑиÑованнÑми паÑамеÑÑами.
function foo(...args) {
return arguments;
}
foo(1, 2, 3); // { "0": 1, "1": 2, "2": 3 }
Тем не менее, в неÑÑÑогиÑ
ÑÑнкÑиÑÑ
ÑооÑвеÑÑÑвие Ð¼ÐµÐ¶Ð´Ñ Ð¸Ñ
аÑгÑменÑами и обÑекÑом arguments
ÑÑÑеÑÑвÑÐµÑ ÑолÑко в Ñом ÑлÑÑае, еÑли ÑÑнкÑÐ¸Ñ Ð½Ðµ ÑодеÑÐ¶Ð¸Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ñ
оÑÑаÑоÑнÑÑ
паÑамеÑÑов, паÑамеÑÑов по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ деÑÑÑÑкÑÑÑиÑованнÑÑ
паÑамеÑÑов. ÐапÑимеÑ, в ÑÑнкÑии, пÑиведÑнной ниже, иÑполÑзÑеÑÑÑ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾ ÑмолÑаниÑ, и в данном ÑлÑÑае возвÑаÑаемÑй ÑезÑлÑÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ñавен 10, а не 100:
function bar(a = 1) {
arguments[0] = 100;
return a;
}
bar(10); // 10
Ð ÑледÑÑÑем пÑимеÑе возвÑаÑаеÑÑÑ 100, поÑколÑÐºÑ Ð·Ð´ÐµÑÑ Ð½ÐµÑ Ð¾ÑÑаÑоÑнÑÑ Ð¿Ð°ÑамеÑÑов, паÑамеÑÑов по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ деÑÑÑÑкÑÑÑиÑованнÑÑ Ð¿Ð°ÑамеÑÑов:
function zoo(a) {
arguments[0] = 100;
return a;
}
zoo(10); // 100
Ðа Ñамом деле, еÑли оÑÑаÑоÑнÑе паÑамеÑÑÑ, паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ деÑÑÑÑкÑÑÑиÑованнÑе паÑамеÑÑÑ Ð½Ðµ иÑполÑзÑÑÑÑÑ, ÑоÑмалÑнÑе аÑгÑменÑÑ Ð±ÑдÑÑ ÑÑÑлаÑÑÑÑ Ð½Ð° поÑледние знаÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑа arguments
, пÑи ÑÑиÑÑвании знаÑений ÑоÑмалÑнÑÑ
аÑгÑменÑов бÑдÑÑ ÑÑиÑÐ°Ð½Ñ Ð¿Ð¾Ñледние даннÑе из arguments
, а пÑи изменении знаÑений ÑоÑмалÑнÑÑ
аÑгÑменÑов бÑÐ´ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»Ñн и обÑÐµÐºÑ arguments
. ÐÑÐ¸Ð¼ÐµÑ Ð¿ÑиведÑн в коде ниже:
function func(a, b) {
arguments[0] = 90;
arguments[1] = 99;
console.log(a + " " + b);
}
func(1, 2); //90, 99
или
function func(a, b) {
a = 9;
b = 99;
console.log(arguments[0] + " " + arguments[1]);
}
func(3, 4); //9, 99
Ðо в ÑлÑÑае, когда пÑименÑÑÑÑÑ Ð¾ÑÑаÑоÑнÑе паÑамеÑÑÑ, паÑамеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ деÑÑÑÑкÑÑÑиÑованнÑе паÑамеÑÑÑ, бÑÐ´ÐµÑ Ð¾Ð±ÑабоÑано ноÑмалÑное поведение, как в ÑлÑÑае паÑамеÑÑов по ÑмолÑаниÑ:
function func(a, b, c = 9) {
arguments[0] = 99;
arguments[1] = 98;
console.log(a + " " + b);
}
func(3, 4); //3, 4
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4