2013-01-17 11 views
9

Stavo leggendo della documentazione sulla funzione bind() in javascript.Che cosa significa passare `undefined` a bind()?

Uno degli esempi inizia in questo modo:

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] 

Quindi la mia domanda è:

Che cosa fa esattamente significhi passare (undefined, 37)-bind() qui?

risposta

11

Significa che non si desidera che this faccia riferimento a qualcosa nella funzione associata risultante. In altre parole, assicura che quando si chiama la funzione associata, this sarà undefined. Esattamente perché lo faresti ovviamente dipende dal codice; molte funzioni non usano this quindi è un modo di essere in ordine.

Si noti che in modalità non rigorosa, si può essere il caso che il runtime sostituirà l'oggetto globale (window in un browser) per undefined, ma non riesce a trovare alcuna specifica che stabilisce che il comportamento. In modalità rigorosa, non viene eseguita alcuna sostituzione.

+0

Quando dicono "argomento principale predefinito", si riferiscono al 37? (E non al 'indefinito') – BeeBand

+2

@BeeBand sì - il primo argomento a' bind() 'è il valore che si desidera' questo' a essere impostato su quando viene chiamata la funzione risultante. I parametri successivi vengono passati di fronte a qualsiasi altra cosa viene passata al punto (i) di chiamata. – Pointy

+0

@Pointy grazie. Esiste –

3

Il primo parametro su bind specifica il valore this all'interno della funzione. Può essere usato per convertirlo in un "metodo" che agisce su un oggetto. Tuttavia se passi undefined significa che rimane una funzione. Quindi nell'esempio che hai citato sopra non c'è differenza.