2013-01-17 13 views
9

javascript'te bind() işleviyle ilgili bazı belgeleri okuyordum. örneklerden"undefined" öğesini bind() öğesine aktarmak ne demektir?

biri böyle başlıyor:

function list() { 
    return Array.prototype.slice.call(arguments); 
} 

var list1 = list(1, 2, 3); // [1, 2, 3] 

// Create a function with a preset leading argument 
var leadingZeroList = list.bind(undefined, 37); 

var list2 = leadingZeroList(); // [37] 

Yani benim soru:

tam olarak burada bind() için (undefined, 37) geçmek demektir ne yapar?

cevap

11

Bu, ilgili sınır işlevindeki herhangi bir öğeye başvurmak için this istemediğiniz anlamına gelir. Başka bir deyişle, bağlı fonksiyonunuzu çağırdığınızda, this'un undefined olacaktır. Tam olarak bunu neden yaptığınız, elbette ki kodlara göre değişir; Bir çok fonksiyon this kullanmıyor, bu yüzden düzenli olmanın bir yolu. olmayan katı modda, bu çalışma zamanı undefined için küresel nesne (bir tarayıcıda window) ikame edecektir durumda olabilir, ama o davranışı öngören hiçbir spec bulabilmesi

Not. Katı modda, böyle bir ikame gerçekleştirilmez.

+0

"Önceden belirlenmiş öntanımlı argüman" dediklerinde, 37? 'Ye ("undefined" değil) atıfta bulunuyorlar mı? – BeeBand

+2

@BeeBand evet -' bind() 'ifadesinin ilk argümanı, 'this' değerini istediğiniz değerdir. sonuç fonksiyonu çağrıldığında ayarlanmalıdır. Sonraki parametreler, başka bir deyişle, çağrılan noktanın (noktalarında) geçilenlerin önüne geçirilir. – Pointy

+0

@Pointy Teşekkürler. –

3

bind ilk parametresi, işlev içinde this değerini belirtir. Bir nesne üzerinde hareket eden bir 'yönteme' dönüştürmek için kullanılabilir. Ancak, undefined'u geçerseniz, bunun bir işlev olduğu anlamına gelir. Yani yukarıda bahsettiğiniz örnekte hiçbir fark yoktur.

İlgili konular