2016-03-24 10 views
4
if (true) { 
    function test() { 
    console.log(true); 
    } 
} else { 
    function test() { 
    console.log(false); 
    } 
} 

test() 

Krom 48 (ve düğüm < 5.9.1) yanlış, krom 49 (ve firefox) günlüğünü günlüğe kaydeder. Felç dalından kalkmamak suretiyle optimize edilmişlerdir, ancak bu mevcut uygulamaları bozabilir.
Spesifikasyonlara göre hangisi doğrudur?kaldırma davranışı krom 48 ve 49 arasında değişti?

+1

Dupe'de, bu şekilde işlevlerin bildirilmesi için Chrome 49'un eklenmesi ve muhtemelen Chrome'un önceki sürümlerinde belirtildiği gibi çalışmaya başlamadan önce bu şekilde yazılmış herhangi bir kod gibi görünüyor. Onlar zaten çalışıyorlardı. –

cevap

2

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function'a göre, ECMAScript standardı, Chrome 49'un yaptığı gibi koşullu oluşturma için blok deyimlerindeki işlev bildirimlerini yeniden kaldırmaktır. Bununla birlikte, ECMAScript 6'dan önce, koşullu bloklardaki işlevlerin bildirilmesi davranışı tanımlanmamıştı - tarayıcılar bu koşullu oluşturma mekanizmasını kullanabilir, gördükleri ilk (veya son) işlevi kaldırırlar (Chrome 48'in yaptığı gibi) , ya her iki işlevi de kaldırmayın ve test(); numaralı hatayı döndürmeyin ya da bilgisayarınızı ateşe verebilecek bir JavaScript ile ilgili olmayan bir şey yapın.

İlgili konular