arguments

Podsumowanie

Tablicopodobny obiekt odpowiadaj膮cy argumentom przekazanym do funkcji.

Zmienna lokalna we wszystkich funkcjach oraz wycofywana w艂asno艣膰 obiektu Function
Zaimplementowana w: JavaScript 1.1, NES 2.0

JavaScript 1.2: dodano w艂asno艣膰 arguments.callee.

JavaScript 1.3: wycofywana w艂asno艣膰 arguments.caller; usuni臋to obs艂ug臋 nazw argument贸w oraz zmiennych lokalnych jako w艂asno艣ci obiektu arguments.

JavaScript 1.4: wycofywane arguments, arguments.callee oraz arguments.length jako w艂asno艣ci Function; zachowanie arguments jako lokalnej zmiennej funkcji oraz arguments.callee oraz arguments.length jako w艂asno艣ci tej zmiennej.

Wersja ECMA: ECMA-262

Opis

Obiekt arguments jest zmienn膮 lokaln膮 dost臋pn膮 wewn膮trz ka偶dej funkcji; arguments jako w艂asno艣膰 Function nie mo偶e by膰 ju偶 u偶ywana.

Do argument贸w wewn膮trz funkcji mo偶esz odwo艂a膰 si臋 u偶ywaj膮c obiektu arguments. Obiekt ten zawiera pozycj臋 dla ka偶dego argumentu przekazanego funkcji, przy czym indeks pierwszego z nich ma warto艣膰 0. Na przyk艂ad, je艣li do funkcji przekazane s膮 trzy argumenty, mo偶na si臋 do nich odwo艂a膰 w nast臋puj膮cy spos贸b:

arguments[0]
arguments[1]
arguments[2]

Argumentom mog膮 by膰 r贸wnie偶 przypisywane warto艣ci:

arguments[1] = 'nowa wartosc';
Uwaga: silnik JavaScript SpiderMonkey posiada bug, w kt贸rym nie mo偶na do arguments[n] przypisa膰 warto艣ci, je艣li n jest wi臋ksze ni偶 liczba formalnych lub rzeczywistych parametr贸w. B艂膮d ten zosta艂 usuni臋ty w silniku JavaScript 1.6.

Obiekt arguments nie jest tablic膮. Jest do niej podobny, lecz nie posiada 偶adnej z w艂asno艣ci tablicy poza length. Przyk艂adowo nie posiada on metody pop. Mo偶e by膰 on jednak skonwertowany do prawdziwej tablicy:

 var args = Array.prototype.slice.call(arguments);

Obiekt arguments dost臋pny jest wy艂膮cznie wewn膮trz cia艂a funkcji. Pr贸ba dost臋pu do obiektu arguments spoza cz臋艣ci deklaracyjnej funkcji zako艅czy si臋 b艂臋dem.

Mo偶esz u偶y膰 obiektu arguments, je艣li funkcja wywo艂ana jest z wi臋ksz膮 liczb膮 argument贸w ni偶 zosta艂o to zadeklarowane. Jest to u偶yteczne dla funkcji, kt贸re wywo艂ywa膰 mo偶na ze zmienn膮 liczb膮 argument贸w. Aby okre艣li膰 liczb臋 argument贸w przekazywanych do funkcji mo偶na u偶y膰 w艂asno艣ci arguments.length, a nast臋pnie skorzysta膰 z ka偶dego z argument贸w u偶ywaj膮c obiektu arguments (aby okre艣li膰 liczb臋 argument贸w zadeklarowanych podczas definiowania funkcji, skorzysta膰 mo偶na z w艂asno艣ci Function.length).

W艂asno艣ci

arguments.callee
Okre艣la cia艂o funkcji aktualnie wykonywanej funkcji.
arguments.caller
Okre艣la nazw臋 funkcji, kt贸ra wywo艂a艂a aktualnie wykonywan膮 funkcj臋.
arguments.length
Okre艣la liczb臋 argument贸w przekazywanych do funkcji.

Zgodno艣膰 wsteczna

JavaScript 1.3 i wcze艣niejsze wersje

Opr贸cz dost臋pno艣ci jako zmienna lokalna, obiekt arguments jest r贸wnie偶 w艂asno艣ci膮 obiektu Function i mo偶e by膰 poprzedzony nazw膮 funkcji. Na przyk艂ad, je偶eli do funkcji myFunc s膮 przekazywane trzy argumenty o nazwie arg1, arg2, i arg3, mo偶na odwo艂a膰 si臋 do tych argument贸w nast臋puj膮co:

myFunc.arguments[0]
myFunc.arguments[1]
myFunc.arguments[2]

JavaScript 1.1 i 1.2

Nast臋puj膮ce cechy dost臋pne w JavaScripcie 1.1 i JavaScripcie 1.2 zosta艂y usuni臋te:

  • Ka偶da zmienna lokalna funkcji jest w艂asno艣ci膮 obiektu arguments. Na przyk艂ad, je艣li funkcja myFunc posiada zmienn膮 lokaln膮 nazwan膮 myLocalVar, mo偶esz odwo艂a膰 si臋 do zmiennej jako arguments.myLocalVar.
  • Ka偶dy argument formalny funkcji jest w艂asno艣ci膮 obiektu arguments. Na przyk艂ad, je偶eli funkcja myFunc posiada dwa argumenty o nazwie arg1 i arg2, mo偶esz odwo艂a膰 si臋 do nich jako arguments.arg1 i arguments.arg2 (mo偶esz tak偶e odwo艂a膰 si臋 do tych argument贸w poprzez arguments[0] i arguments[1]).

Przyk艂ady

Przyk艂ad: Definiowanie funkcji 艂膮cz膮cej 艂a艅cuchy znak贸w

Ten przyk艂ad definiuje funkcj臋 艂膮cz膮c膮 kilka 艂a艅cuch贸w znak贸w. Jedynym formalnym argumentem tej funkcji jest 艂a艅cuch znak贸w, kt贸ry okre艣la znaki oddzielaj膮ce poszczeg贸lne 艂膮czone elementy. Funkcja jest zdefiniowana nast臋puj膮co:

function myConcat(separator) {
   result = ""; // inicjalizacja listy
   // iteracja pomi臋dzy argumentami
   for (var i = 1; i < arguments.length; i++) {
      result += arguments[i] + separator;
   }
   return result;
}

Mo偶esz przes艂a膰 dowoln膮 liczb臋 argument贸w do tej funkcji, tworz膮c na ich bazie list臋.

// zwraca "czerwony, pomaranczowy, niebieski, "
myConcat(", ", "czerwony", "pomaranczowy", "niebieski");

// zwraca "slon; zyrafa; lew; gepard; "
myConcat("; ", "slon", "zyrafa", "lew", "gepard");

// zwraca "szalwia. bazylia. oregano. pieprz. pietruszka. "
myConcat(". ", "szalwia", "bazylia", "oregano", "pieprz", "pietruszka");

Przyk艂ad: Definiowanie funkcji, kt贸ra tworzy list臋 HTML

Ten przyk艂ad definiuje funkcj臋, kt贸ra tworzy 艂a艅cuch znak贸w reprezentuj膮cy kod HTML listy. Jedynym argumentem formalnym tej funkcji jest ci膮g znak贸w, kt贸ry przyjmuje warto艣膰 "u" dla listy nieuporz膮dkowanej, lub "o" w przypadku listy uporz膮dkowanej. Funkcja ta jest zdefiniowana nast臋puj膮co:

function list(type) {
  var result = "<" + type + "l>";

  // iteracja pomi臋dzy argumentami
  for (var i = 1; i < arguments.length; i++)
    result += "<li>" + arguments[i] + "</li>";

  result += "</" + type + "l>"; // koniec listy

  return result;
}

Mo偶esz przekaza膰 funkcji dowoln膮 liczb臋 argument贸w, a ona doda ka偶dy z nich jako kolejn膮 pozycj臋 na li艣cie o wskazanym typie. Przyk艂adowo nast臋puj膮ce wywo艂anie funkcji:

var listHTML = list("u", "Raz", "Dwa", "Trzy");
// listHTML zawiera 艂a艅cuch "<ul><li>Raz</li><li>Dwa</li><li>Trzy</li></ul>"