2015-04-09 9 views
7

Dlaczego jest to dozwolone?Użycie function.prototype.bind bezpośrednio w deklaracji funkcji

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

I dlaczego nie jest to lub lepiej, dlaczego dostaję błąd składniowy w tym przypadku?

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

Więc dlaczego muszę funkcja wyraz składni, aby dostać tę pracę i czy jest jakiś sposób, aby wykorzystać bind metodę bezpośrednio na deklaracji funkcji?

+0

Deklaracja funkcji nie jest wyrażeniem, więc nie można tego zrobić. Ale możesz wymusić wyrażenie '! Function f() {}. Bind ({x: 1})()'. Poszukaj informacji na [IIFE] (http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript). – elclanrs

+0

Czy wiesz, dlaczego nie można składać deklaracji? – user3448600

+1

Bo to nie jest wyrażenie. Składnia jest niejednoznaczna, musisz ujednoznacznić się przez wymuszenie wyrażenia. Sprawdź specyfikację, aby uzyskać więcej informacji http://www.ecma-international.org/ecma-262/5.1/#sec-13 – elclanrs

Odpowiedz

3

Drugi przykład działa, ale składnia jest nieco off:

Surround funkcja w parens. Muszę powiedzieć, że nie jestem do końca pewien, dlaczego. Wygląda na to, że zadziała bez parens, co? : P

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

Parens tworzą wyrażenie, a tym samym funkcję anon, a tym samym "wartość ogona". możesz także wykonać alternatywę tylko do prefiksu dla zawijań paren: '0 ||' – dandavis

Powiązane problemy