2011-12-17 4 views
14

Quando si esegue il seguente script in Safari (con l'ispettore aperto)Non può ispezionare variabile portata quando si utilizza la modalità rigorosa

window.onload = function() { 
    "use strict"; 
    var x = 1; 
    debugger; // debugger will auto-break on this line 
} 

ottengo il seguente errore quando si chiede x nella console pur essendo in quel punto di interruzione :

Error 
message: "'with' statements are not valid in strict mode" 

Rimozione della linea di "use strict"; mi consente l'accesso x dalla console, mentre su quel punto di interruzione.

Entrambe le volte lo x viene visualizzato sotto Scope Variables nella barra laterale.

+2

penso che l'errore deve essere altrove; non mi capita [utilizzando questa pagina di test] (http://jsbin.com/acagon) in Safari (non riesco a impostare il punto di interruzione, ma non ottengo alcun errore e ottengo l'output previsto). Puoi pubblicare un test completo * completo * alla domanda (e idealmente anche su http://jsbin.com o http://jsfiddle.net). –

+0

Non riesco a metterci un dito sopra, ma qualcosa mi dice che hai una dichiarazione 'with' da qualche parte nel tuo codice ... Sto indovinando completamente qui, ovviamente ... (Btw' with' statement to throw in strict mode code.) –

+0

hai un 'with()' nel tuo codice da qualche altra parte? con() non è piaciuto e molti lo vogliono interrotto in ECMAScript –

risposta

24

Questo sembra essere un problema noto con Safari: https://bugs.webkit.org/show_bug.cgi?id=65829

Per riprodurre l'errore, è sufficiente digitare alcun codice nella console, mentre fermato a un punto di interruzione e, mentre in modalità rigorosa.

Ecco il codice dal bug report:

(function(){ 
    "use strict"; 
    debugger; 
})(); 

Così, quando sei al punto di interruzione, passare alla console e digitare 2+3 (o qualsiasi espressione), e si otterrà l'errore.

enter image description here

+3

+1 Bello .... –

+0

Dice che il bug è stato risolto ma lo vedo ancora in Safari 8.0.7. – user276648