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

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

In PhpStorm questo codice mostra un errore:La modalità rigorosa proibisce le dichiarazioni delle funzioni a livello di istruzione?

Function statement not at top level of a program or function is prohibited

Tuttavia, Chrome felicemente lo esegue, anche nel debugger e senza alcun output della console.

Ora è vietato o no?

+1

Non dovrebbe essere consentito. – Oriol

+0

Possibile duplicato di [Perché Chrome rimane silenzioso quando si utilizzano le funzioni all'interno dei blocchi in "modalità rigorosa"?] (Http://stackoverflow.com/questions/36756010/why-chrome-still-keep-silent-when-using-functions -inside-blocks-in-strict-mode) –

risposta

4

Sì, in ES5 sono vietati (e in modalità rigorosa, tutte le implementazioni). Vedere anche Kangax' great article per le istruzioni di funzione in modalità sciatta.

Tuttavia, in ES6 sono dichiarazioni di funzione a livello di blocco con nuova semantica. Vedi anche What are the precise semantics of block-level functions in ES6?. Questo sembra essere ciò che Chrome implementa qui; foo non è disponibile al di fuori del blocco if.

+0

Quindi il mio Chrome implementa le ultime specifiche mentre il mio PhpStorm è dietro? Il mio livello di linguaggio JS è impostato su 'JSX Harmony'. – AndreKR

+0

@AndreKR: È probabile. Non ho dimestichezza con PhpStorm o "JSX Harmony", ma dato che ES Harmony è un processo in corso questo sembra essere dubbio :-) Stai già usando ES6? – Bergi

+0

Non lo sto usando, ma durante l'indagine ho cambiato il livello della lingua. L'errore si presenta con il livello di lingua impostato su "ECMAScript 6". – AndreKR

Problemi correlati