2015-08-06 5 views
5
"use strict"; 

if (true) { 
    function foo() { 
    } 
} 

PhpStorm bu kod bir hata gösterilir.Sıkı mod, ifade düzeyi işlev bildirimlerini yasaklıyor mu?</p> <blockquote> <p>Function statement not at top level of a program or function is prohibited</p> </blockquote> <p>Bununla birlikte, krom mutlu da ayıklayıcısında ve bir konsol çıkışı olmadan çalıştırır:

Şimdi yasaklanmış mı değil mi?

+1

İzin verilmemelidir. – Oriol

+0

Mümkün olan bir kopyası [Neden Chrome, "katı modda" bloklar içindeki işlevler kullanılırken hala sessiz kalıyor?) (Http://stackoverflow.com/questions/36756010/why-chrome-still-keep-silent-when-using-functions -inside-bloklar-in-sıkı modu) –

cevap

4

Evet, ES5'te yasaklandılar (ve sıkı modda, tüm uygulamalar atılıyor). Özensiz modda işlev ifadeleri için ayrıca bkz. Kangax' great article. Ancak, ES6'da, yeni semantiklerle blok düzeyinde işlev bildirimleridir. Ayrıca bkz. What are the precise semantics of block-level functions in ES6?. Bu, Chrome'un burada uyguladığı gibi görünüyor; foo, if bloğunun dışında kullanılamaz.

+0

Yani benim PhpStorm arkada iken Chrome benim en son özellikleri uygular? JS dil seviyem "JSX Harmony" olarak ayarlandı. – AndreKR

+0

@AndreKR: Muhtemelen bu. PhpStorm veya "JSX Harmony" ile aşina değilim, ancak ES Harmony'nin devam eden bir süreç olduğu göz önüne alındığında bu şüpheli gibi görünüyor :-) ES6 kullanıyor musunuz? – Bergi

+0

Kullanmıyorum ama bunu araştırırken dil seviyesini değiştirdim. Hata, "ECMAScript 6" olarak ayarlanmış dil seviyesiyle de ortaya çıkıyor. – AndreKR

İlgili konular