Baseline Widely available
СинÑакÑÐ¸Ñ Ð¾ÑÑаÑоÑнÑÑ Ð¿Ð°ÑамеÑÑов ÑÑнкÑии позволÑÐµÑ Ð¿ÑедÑÑавлÑÑÑ Ð½ÐµÐ¾Ð³ÑаниÑенное множеÑÑво аÑгÑменÑов в виде маÑÑива.
ÐнÑеÑакÑивнÑй пÑимеÑfunction sum(...theArgs) {
let total = 0;
for (const arg of theArgs) {
total += arg;
}
return total;
}
console.log(sum(1, 2, 3));
// Expected output: 6
console.log(sum(1, 2, 3, 4));
// Expected output: 10
СинÑакÑиÑ
function(a, b, ...theArgs) {
// ...
}
ÐпиÑание
ÐÑли поÑледний именованнÑй аÑгÑÐ¼ÐµÐ½Ñ ÑÑнкÑии Ð¸Ð¼ÐµÐµÑ Ð¿ÑеÑÐ¸ÐºÑ ...
, он авÑомаÑиÑеÑки ÑÑановиÑÑÑ Ð¼Ð°ÑÑивом Ñ ÑлеменÑами Ð¾Ñ 0
до theArgs.length-1
в ÑооÑвеÑÑÑвии Ñ Ð°ÐºÑÑалÑнÑм колиÑеÑÑвом аÑгÑменÑов, пеÑеданнÑÑ
в ÑÑнкÑиÑ.
function myFun(a, b, ...manyMoreArgs) {
console.log("a", a);
console.log("b", b);
console.log("manyMoreArgs", manyMoreArgs);
}
myFun("один", "два", "ÑÑи", "ÑеÑÑÑе", "пÑÑÑ", "ÑеÑÑÑ");
// Console Output:
// a, один
// b, два
// manyMoreArgs, [ÑÑи, ÑеÑÑÑе, пÑÑÑ, ÑеÑÑÑ]
ÐÑлиÑÐ¸Ñ Ð¾ÑÑаÑоÑнÑÑ
паÑамеÑÑов Ð¾Ñ Ð¾Ð±ÑекÑа arguments
СÑÑеÑÑвÑÐµÑ ÑÑи оÑновнÑÑ
оÑлиÑÐ¸Ñ Ð¾ÑÑаÑоÑнÑÑ
паÑамеÑÑов Ð¾Ñ Ð¾Ð±ÑекÑа arguments
:
arguments
ÑодеÑÐ¶Ð¸Ñ Ð²Ñе аÑгÑменÑÑ, пеÑедаваемÑе в ÑÑнкÑиÑ;arguments
не ÑвлÑеÑÑÑ Ð¼Ð°ÑÑивом, в Ñо вÑÐµÐ¼Ñ ÐºÐ°Ðº оÑÑаÑоÑнÑе паÑамеÑÑÑ ÑвлÑÑÑÑÑ ÑкземплÑÑом Array
и меÑÐ¾Ð´Ñ sort
, map
, forEach
или pop
могÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно Ñ Ð½Ð¸Ñ
иÑполÑзоваÑÑÑÑ;arguments
Ð¸Ð¼ÐµÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ ÑÑнкÑионалÑноÑÑÑ, ÑпеÑиÑиÑнÑÑ ÑолÑко Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ (напÑимеÑ, ÑвойÑÑво callee
).ÐÑÑаÑоÑнÑе паÑамеÑÑÑ Ð±Ñли Ð²Ð²ÐµÐ´ÐµÐ½Ñ Ð´Ð»Ñ ÑменÑÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва Ñаблонного кода:
// Ðо поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾ÑÑаÑоÑнÑÑ
паÑамеÑÑов "arguments" конвеÑÑиÑовали в обÑÑнÑй маÑÑив иÑполÑзÑÑ:
function f(a, b) {
var normalArray = Array.prototype.slice.call(arguments);
// -- или --
var normalArray = [].slice.call(arguments);
// -- или --
var normalArray = Array.from(arguments);
var first = normalArray.shift(); // OK, даÑÑ Ð¿ÐµÑвÑй аÑгÑменÑ
var first = arguments.shift(); // ERROR (arguments не ÑвлÑеÑÑÑ Ð¾Ð±ÑÑнÑм маÑÑивом)
}
// ТепеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ легко полÑÑиÑÑ Ð¾ÑÑаÑоÑнÑе паÑамеÑÑÑ ÐºÐ°Ðº обÑÑнÑй маÑÑив
function f(...args) {
var normalArray = args;
var first = normalArray.shift(); // OK, даÑÑ Ð¿ÐµÑвÑй аÑгÑменÑ
}
ÐеÑÑÑÑкÑÑÑизаÑÐ¸Ñ Ð¾ÑÑаÑоÑнÑÑ
паÑамеÑÑов
ÐÑÑаÑоÑнÑе паÑамеÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð´ÐµÑÑÑÑкÑÑÑиÑÐ¾Ð²Ð°Ð½Ñ (ÑолÑко маÑÑивÑ). ÐÑо ознаÑаеÑ, ÑÑо Ð¸Ñ Ð´Ð°Ð½Ð½Ñе могÑÑ Ð±ÑÑÑ Ð·Ð°Ð´Ð°Ð½Ñ ÐºÐ°Ðº оÑделÑнÑе знаÑениÑ. СмоÑÑиÑе ÐеÑÑÑÑкÑÑÑиÑÑÑÑее пÑиÑваивание.
function f(...[a, b, c]) { return a + b + c; } f(1) // NaN (b и c ÑÐ°Ð²Ð½Ñ undefined) f(1, 2, 3) // 6 f(1, 2, 3, 4) // 6 (ÑеÑвÑÑÑÑй паÑамеÑÑ Ð½Ðµ деÑÑÑÑкÑÑÑиÑован)ÐÑимеÑÑ
Ð ÑÑом пÑимеÑе пеÑвÑй аÑгÑÐ¼ÐµÐ½Ñ Ð·Ð°Ð´Ð°Ð½ как "a"
, вÑоÑой как "b"
, Ñак ÑÑо ÑÑи аÑгÑменÑÑ Ð¸ÑполÑзÑÑÑÑÑ ÐºÐ°Ðº обÑÑно. Ðднако ÑÑеÑий аÑгÑÐ¼ÐµÐ½Ñ "manyMoreArgs"
бÑÐ´ÐµÑ Ð¼Ð°ÑÑивом, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ 3-й, 4-й, 5-й, 6-й ... n-й аÑгÑменÑÑ, коÑоÑÑе пеÑедаÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑ.
function myFun(a, b, ...manyMoreArgs) {
console.log("a", a);
console.log("b", b);
console.log("manyMoreArgs", manyMoreArgs);
}
myFun("один", "два", "ÑÑи", "ÑеÑÑÑе", "пÑÑÑ", "ÑеÑÑÑ");
// a, один
// b, два
// manyMoreArgs, [ÑÑи, ÑеÑÑÑе, пÑÑÑ, ÑеÑÑÑ]
Ðиже... даже еÑли пеÑедано одно знаÑение поÑледним аÑгÑменÑом, оно вÑÑ Ñавно помеÑаеÑÑÑ Ð² маÑÑив.
// иÑполÑзование Ñой же ÑÑнкÑии, ÑÑо и в пÑимеÑе вÑÑе
myFun("один", "два", "ÑÑи");
// a, один
// b, два
// manyMoreArgs, [ÑÑи]
Ðиже... ÑÑеÑий аÑгÑÐ¼ÐµÐ½Ñ Ð½Ðµ бÑл пеÑедан, но "manyMoreArgs" вÑÑ ÐµÑÑ Ð¼Ð°ÑÑив (Ñ Ð¾ÑÑ Ð¸ пÑÑÑой).
// иÑполÑзование Ñой же ÑÑнкÑии, ÑÑо и в пÑимеÑе вÑÑе
myFun("один", "два");
// a, один
// b, два
// manyMoreArgs, []
ÐоÑколÑÐºÑ theArgs
ÑвлÑеÑÑÑ Ð¼Ð°ÑÑивом, колиÑеÑÑво ÑлеменÑов в нÑм опÑеделÑеÑÑÑ ÑвойÑÑвом length
:
function fun1(...theArgs) {
console.log(theArgs.length);
}
fun1(); // 0
fun1(5); // 1
fun1(5, 6, 7); // 3
Ð ÑледÑÑÑем пÑимеÑе, оÑÑаÑоÑнÑе паÑамеÑÑÑ Ð¸ÑполÑзÑÑÑÑÑ Ð´Ð»Ñ ÑбоÑа вÑÐµÑ Ð°ÑгÑменÑов поÑле пеÑвого в маÑÑив. ÐаждÑй из Ð½Ð¸Ñ ÑмножаеÑÑÑ Ð½Ð° пеÑвÑй паÑамеÑÑ Ð¸ возвÑаÑаеÑÑÑ Ð¼Ð°ÑÑив:
function multiply(multiplier, ...theArgs) {
return theArgs.map(function (element) {
return multiplier * element;
});
}
var arr = multiply(2, 1, 2, 3);
console.log(arr); // [2, 4, 6]
ÐеÑÐ¾Ð´Ñ Array
могÑÑ Ð±ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð½Ð° оÑÑаÑоÑнÑÑ
паÑамеÑÑаÑ
, но не на обÑекÑе arguments
:
function sortRestArgs(...theArgs) {
var sortedArgs = theArgs.sort();
return sortedArgs;
}
console.log(sortRestArgs(5, 3, 7, 1)); // 1, 3, 5, 7
function sortArguments() {
var sortedArgs = arguments.sort();
return sortedArgs; // ÑÑо никогда не вÑполниÑÑÑ
}
console.log(sortArguments(5, 3, 7, 1)); // TypeError (arguments.sort is not a function)
ЧÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð¼ÐµÑÐ¾Ð´Ñ Array
на обÑекÑе arguments
, нÑжно пÑеобÑазоваÑÑ ÐµÐ³Ð¾ в наÑÑоÑÑий маÑÑив.
function sortArguments() {
var args = Array.from(arguments);
var sortedArgs = args.sort();
return sortedArgs;
}
console.log(sortArguments(5, 3, 7, 1)); // 1, 3, 5, 7
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
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