2015-08-02 20 views
11

ben aşağıdaki kod parçasını Test işlevi gerçekleştirmek ise: o zamanGarip davranışlar

function pointInside(r, p) { 
    var result = 
     (p.x >= r.location.x - r.size.width * 0.5) && 
     (p.x <= r.location.x + r.size.width * 0.5) && 
     (p.y >= r.location.y - r.size.height * 0.5) && 
     (p.y <= r.location.y + r.size.height * 0.5) 
    ; 
    return result; 
} 

function test() { 
    var rect = {}; 
    rect["location"] = { x:6, y:5 }; 
    rect["size"] = { width:10, height:8 }; 
    var p = { x:10, y:8 }; 
    var inside = pointInside(rect, p); 
    console.log(inside ? "inside" : "outside"); 
} 

metin "içeride" konsola yazılır alır. Harika. Şimdi, eğer bu kadar pointInside işlevini değiştirin: Ben "dışarıda" test işlevini çağırdığınızda sonra konsola yazılır alır

function pointInside(r, p) { 
    return 
     (p.x >= r.location.x - r.size.width * 0.5) && 
     (p.x <= r.location.x + r.size.width * 0.5) && 
     (p.y >= r.location.y - r.size.height * 0.5) && 
     (p.y <= r.location.y + r.size.height * 0.5) 
    ; 
} 

. Daha fazla araştırmada pointInside fonksiyonunun aslında tanımsız bir şekilde geri döndüğünü görüyorum. Niye ya? PointInside'ın iki versiyonu arasında anlamlı bir fark göremiyorum. Bunu bana açıklayan var mı?

cevap

8

Maalesef birçok javascript tercümanlar hakkında bağışlayıcı olmaya çalışıyorum şu eksik noktalı virgül. Eğer "geri dönüş" ü seçtiyseniz ve bir satırın sonu varsa, birçok tercüman bir noktalı virgülü unuttuğunuzu varsayacaktır. Bu nedenle "undefined".

+0

Birçok ayrıntıya katılıyorum olmamakla birlikte, genel his doğrudur: https://www.youtube.com/watch?v=D5xh0ZIEUOE –

+6

Bu, özelliğin bir parçası değildir. “Birçok tercüman yapmaya çalışır”, * tüm * tercümanların * yapması gereken bir şey. –

+0

Belki de gerekir, ama çoğu zaman olduğu gibi, gerçeklik ve standartlar her zaman kesişmez. Şu anda küçük-j'ler kullanıyorum, mikrodenetleyiciler için gömülü bir yorumlayıcı. Bir noktalı virgül için bekleme bekler, bu nedenle standartlara uygun değildir. Tuhaf kurallarla ilgilenmemek, uyumlu olmayabilir ancak kodu küçük ve güvenlik sorunları için doğrulamakta kolay tutar. –

10

Javascript'te, ; isteğe bağlıdır (ifadenin sonunda) ... böylece işleviniz 'undefined' (false-y) değerini döndürür ve bu işlevdeki kodun geri kalanı etkin bir şekilde yok sayılır ... Bu kadar!

deneyin

function pointInside(r, p) { 
    return (
     (p.x >= r.location.x - r.size.width * 0.5) && 
     (p.x <= r.location.x + r.size.width * 0.5) && 
     (p.y >= r.location.y - r.size.height * 0.5) && 
     (p.y <= r.location.y + r.size.height * 0.5) 
    ); 
} 

çok fazla kıracak çünkü muhtemelen sabit asla bir şey, bu aptal bir davranış (kötü) kodu

İlgili konular