Aşağıdakileri denedim ama başarılı olamadım:
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
a fonksiyonunda argümanlar anahtar sözcüğünü kullanarak bir dizi argümana erişebiliyorum, b fonksiyonunda bunlar kayboluyor. Benim yapmaya çalıştığım gibi argümanları başka bir javascript fonksiyonuna geçirmenin bir yolu var mı?
bfonksiyonundaki
argümanlaraaynı erişime sahip olmak için [
.apply()`]1 kullanın, bunun gibi:
function a(){
b.apply(null, arguments);
}
function b(){
alert(arguments); //arguments[0] = 1, etc
}
a(1,2,3);
[Buradan test edebilirsiniz][2].
Yayma işleci, bir ifadenin birden çok bağımsız değişken (işlev çağrıları için) veya birden çok öğe (dizi değişmezleri için) beklenen yerlerde genişletilmesine olanak tanır.
ECMAScript ES6, bunu daha pratik bir şekilde yapmanızı sağlayan yeni bir operatör ekledi: ...Yayma Operatörü.
Uygula` yöntemini kullanmadan örnek:
function a(...args){
b(...args);
b(6, ...args, 8) // You can even add more elements
}
function b(){
console.log(arguments)
}
a(1, 2, 3)
Not Tarayıcınız hala ES5 kullanıyorsa bu kod parçacığı bir sözdizimi hatası döndürür.
Editörün notu: Kod parçacığı console.log()
kullandığından, sonucu görmek için tarayıcınızın JS konsolunu açmalısınız - sayfa içi sonuç olmayacaktır.
Bu sonucu görüntüleyecektir:
Kısacası, dizileri kullanıyorsanız spread operatörü farklı amaçlar için kullanılabilir, bu nedenle fonksiyon argümanları için de kullanılabilir, resmi dokümanlarda açıklanan benzer bir örneği görebilirsiniz: Geri kalan parametreler
Diğer yanıtların hiçbirinin sağlamadığı açıklama, orijinal argümanların hala mevcut olduğu, ancak arguments
nesnesinde orijinal konumda olmadığıdır.
Argumentsnesnesi, fonksiyona sağlanan her gerçek parametre için bir eleman içerir. a
fonksiyonunu çağırdığınızda üç argüman sağlarsınız: 1
, 2
ve 3
sayıları. Dolayısıyla, arguments
[1, 2, 3]
içerir.
function a(args){
console.log(arguments) // [1, 2, 3]
b(arguments);
}
Ancak b
yi çağırdığınızda, tam olarak bir argüman iletirsiniz: a
'nın arguments
nesnesi. Dolayısıyla arguments
[[1, 2, 3]]
içerir (yani, a
nın orijinal argümanlarını içeren özelliklere sahip olan a
'nın arguments
nesnesi olan bir öğe).
function b(args){
// arguments are lost?
console.log(arguments) // [[1, 2, 3]]
}
a(1,2,3);
Nick'in gösterdiği gibi, çağrıda bir dizi arguments
nesnesi sağlamak için apply
kullanabilirsiniz.
Aşağıdaki yöntem de aynı sonuca ulaşır:
function a(args){
b(arguments[0], arguments[1], arguments[2]); // three arguments
}
Ancak apply
genel durumda doğru çözümdür.