Próbowałem następujących bezskutecznie:
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
W funkcji a mogę użyć słowa kluczowego arguments, aby uzyskać dostęp do tablicy argumentów, w funkcji b są one utracone. Czy istnieje sposób przekazywania argumentów do innej funkcji javascript, tak jak próbuję to zrobić?
javascript
Anders Nygaard
źródło
źródło
arguments
tak naprawdę nie jest to tablica (ale raczej obiekt, który implementuje semantykę podobną do tablicy ) i dlatego na pierwszy rzut oka nie jest całkowicie jasne, czy można jej używać w taki sam sposób, jak rzeczywistą tablicę.Odpowiedzi:
Użyj,
.apply()
aby mieć taki sam dostęp doarguments
funkcji inb
, jak to:Możesz to przetestować tutaj .
źródło
var copy = [].slice.call(arguments); <remove what you want> myFunc.apply(this, copy);
apply
tego może zepsuć zakresb
(jeśli na przykład jest to jakaś wewnętrzna funkcja obiektu)Operator rozsiewu
ECMAScript ES6 dodał nowy operator, który pozwala to zrobić w bardziej praktyczny sposób: ... Operator rozprzestrzeniania .
Przykład bez użycia
apply
metody:Note Ten fragment kodu zwraca błąd składniowy, jeśli Twoja przeglądarka nadal używa ES5.
Od redakcji: Ponieważ zastosowań urywek
console.log()
, należy otworzyć konsolę JS w przeglądarce, aby zobaczyć wynik - nie będzie żadnego wynik w treści strony.Wyświetli ten wynik:
Krótko mówiąc, operator rozkładania może być używany do różnych celów, jeśli używasz tablic, więc może być również używany do argumentów funkcji, podobny przykład wyjaśniono w oficjalnych dokumentach: Parametry odpoczynku
źródło
...args
teja
funkcji. Możesz po prostu wykonać funkcję bez argumentów i przekazać je zab
pomocą...arguments
...args
jakoa
„s wejście może być ważne, jeśli mają funkcje zagnieżdżone.Wyjaśnienie, że żadna z pozostałych odpowiedzi nie dostarcza, jest takie, że oryginalne argumenty są nadal dostępne, ale nie w pierwotnej pozycji w
arguments
obiekcie.arguments
Obiekt zawiera jeden element za każdy parametr dostarczanego do funkcji. Podczas rozmowy telefoniczneja
podać trzy argumenty: Numery1
,2
oraz,3
. Więcarguments
zawiera[1, 2, 3]
.Podczas rozmowy telefonicznej
b
, jednak zdać dokładnie jednego argumentu:a
„sarguments
obiektu. Więcarguments
zawiera[[1, 2, 3]]
(czyli jeden element, którya
jestarguments
przedmiotem, który ma właściwości zawierające oryginalne argumentya
).Jak pokazał @Nick, możesz użyć,
apply
aby podać ustawionyarguments
obiekt w wywołaniu.Następujące wyniki osiągają ten sam wynik:
Ale
apply
jest właściwe rozwiązanie w ogólnym przypadku.źródło
this
doapply
?Spróbuj tego
źródło