2015-04-09 6 views
7

Perché è consentito?Utilizzo di function.prototype.bind direttamente sulla dichiarazione di funzione

var f = function() { 
    console.log(this.x); 
}.bind({x:1})(); 

E perché questo non è o meglio perché ottengo errore di sintassi in questo caso?

function f() { 
    console.log(this.x); 
}.bind({x:1})(); 

Allora, perché ho bisogno funzione espressione sintassi per ottenere questo lavoro e c'è un modo per utilizzare il metodo bind direttamente sul dichiarazione di funzione?

+0

Una dichiarazione di funzione non è un'espressione, quindi non è possibile farlo. Ma puoi forzare un'espressione '! Function f() {}. Bind ({x: 1})()'. Cerca informazioni su [IIFE] (http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript). – elclanrs

+0

Sai perché non è consentito sulla dichiarazione? – user3448600

+1

Perché non è un'espressione. La sintassi è ambigua, devi disambiguare forzando un'espressione. Controlla le specifiche per maggiori informazioni http://www.ecma-international.org/ecma-262/5.1/#sec-13 – elclanrs

risposta

3

Il secondo esempio funziona ma la sintassi è leggermente fuori:

surround funzione in parentesi. Devo dire che non sono del tutto sicuro del perché. Sembra che funzionerebbe senza i parus eh? : P

(function f() { 
    console.log(this.x); 
}).bind({x:1})(); 
+2

parens fanno un'espressione, e quindi una funzione anon, e quindi un "valore di coda". puoi anche fare l'unica alternativa al prefisso per gli involucri paren: '0 ||' – dandavis

Problemi correlati