2013-03-01 19 views
5

Merhaba, Javascript için yeniyim ve Oreilly'nin Javascript'ini kesin bir rehber okuyorum. beyan bildirimi bölümünde şöyle der:İşlev bildirimi koşullu ifade içinde görünmemeli mi?

var a = 1; 
while(a < 5){ 
    a++; 
    function double(a){return a * 2 }; 
    console.log(double(a)); 
}  

Bana hiç hata vermek ve beklendiği gibi çalışmaz node.js görünüyor:

enter image description here

Ben basit bir test yaptı. Bu konuda herhangi bir yorum var mı?

+2

Sıkı modda çalıştırın ve hatayı alırsınız. Bu geçersiz sözdizimi * (Mozilla'nın JS uygulamasının benzer bir sözdiziminin olduğu durumlar hariç) *, ancak tarihsel olarak uygulamalarda izin verildi. –

cevap

-1

Bu doğru değil. Ancak beklediğiniz gibi davranamayacağını akılda tutmalısınız.

Örneğin, işe yarayacak:

if(false) { 
    function double(a) {return a*2;}; 
} 
else { 
    console.log(double(4)); 
} 

Eğer fonksiyon tanımlanmış asla düşünebilir rağmen nedeniyle ulaştı asla bir if içinde olmak üzere, fonksiyon aslında üstüne çekilir Geçerli "blok" (bu bir işlev veya tüm <script> etiket veya dosya olsun) ve bu nedenle her yerde erişilebilir.

Sen bir if bloğun içine function tanımlarını koymak, ama neden yok olamaz var.

+1

, yapmamanız gereken pek çok neden var - 1. spec, istemiyor, 2. bazı tarayıcılarda, işe yaramıyor! – Alnitak

+0

@Alnitak Özellikle yapmaman gerektiğini söyledim. Ancak, kaldırma konusundaki spesifikasyonlara göre, "var" ile aynıdır. –

+0

Bu özellik, "kaldırma" * (özelliklerde kullanılmayan bir terim) * hakkında belirtimin ne anlama geldiğine bağlı olarak geçerli değildir. Uygulamalar buna izin verebilir ve kaldırma işlemini aynı şekilde yapabilir, ancak yine de geçerli değildir. –