2015-04-09 18 views
7

Neden buna izin verilir?function.prototype.bind işlev bildirimini doğrudan kullanma

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

Ve bu neden veya neden daha iyi değil, bu durumda sözdizimi hatası alıyorum?

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

Yani, bu işi almak için fonksiyon İfade sözdizimi ihtiyaç ve işlev bildiriminde doğrudan bind yöntemi kullanmak için bir yol yoktur neden?

+0

Bir işlev bildirimi bir ifade değildir, bu yüzden bunu yapamazsınız. Ancak '' function f() {} .bind ({x: 1})() 'ifadesini zorlayabilirsiniz. [IIFE] hakkında bilgi arayın (http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript). – elclanrs

+0

Deklarasyona neden izin verilmediğini biliyor musunuz? – user3448600

+1

Çünkü bu bir ifade değil. Sözdizimi belirsizdir, bir ifadeyi zorlayarak ayrılmanız gerekir. Daha fazla bilgi için teknik özellikleri inceleyiniz. Http://www.ecma-international.org/ecma-262/5.1/#sec-13 – elclanrs

cevap

3

ikinci örnek çalışır ancak sözdizimi biraz kapalıdır:

Surround Pars işlevi. Tamamen neden emin olmadığımı söylemeliyim. Parens olmadan çalışacak gibi görünüyor ha? : P

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

parens bir ifade ve böylece bir anon fonksiyonu ve böylece bir "kuyruk değeri" yapar. Ayrıca paren sararları için sadece önek alternatifini de yapabilirsiniz: '0 || – dandavis

İlgili konular