2016-03-14 28 views
5

Birisi bana yardımcı olabilir mi? JS snippet'inde neden bu davranış var?JS Garip davranış

var foo = function() { 
    return { 
     hi: console.log("foo") 
    } 
} 

var foo1 = function() { 
    return 
    { 
     hi: console.log("foo1") 
    } 
} 

foo(); 
foo1(); 

Neden sadece "foo" yazdırılır?

fiddle

DÜZENLEME Tamam, bu çünkü otomatik noktalı virgül ekleme olduğunu ANCAK

bu davaları yürütmek değil JS zorlamak için bazı yollar var mı?

Yani, burada hata yapacak bir şey yapabilir miyiz? EDIT2

iyi öneri benziyor JShint - ı JavaScript en automatic semi-colon insertion isabet ettik

+0

Sadece bir önsezi ama zamanlama olayı olabilir mi? Eğer foo() 'ya yorum yaparsanız, o zaman 'foo1' basılır. Biliyorum ki, eğer bu mantıklıysa, 'log.de '' konsol.log '' un bazı tuhaf atıkları var. – ste2425

+0

Özellikle http://stackoverflow.com/a/3721802/476 – deceze

+0

@deceze dosyasının bir kopyası daha sonra "foo()" yorumlanmışsa neden iyi çalışıyor? – ste2425

cevap

8

here istedi. - Sadece undefined döndürüyor

var foo1 = function(){ 
    return; 
    { 
    hi:console.log("foo1") 
    } 
} 

IE o (ve böylece console.log çalışmıyor) hiç değişmez nesne cevap vermiyor: Sizin ikinci blok eşdeğerdir.

2

foo1'de, nesne değerlendirilmeden önce işlev döner. foo1() çıktısını kontrol ederseniz, hiçbir şey döndürmez Bu yüzden çoğu javascript stili kılavuzları, return anahtar kelimesiyle aynı satırda açık nesneler önerir.

İlgili konular