2011-08-24 9 views

Odpowiedz

20

Tak, oprócz asynchronicznych. http://jsfiddle.net/pimvdb/R4dfJ/3/

DIY:

var a = 1, b, c; 

setTimeout(function() { 
    b = 2; 
    console.log('Running', a, b, c); 
}, 1000); 

somerandomthingy; 

c = 3; 

Uncaught ReferenceError: somerandomthingy is not defined

Running 1 2 undefined

Więc:

  • a i b zostały ustawione
  • c nie została ustawiona
  • Timeout nadal występuje

Co do "czy on-line nadal działa" - cóż, jeśli program obsługi jest ustawiony na uruchamiany kod (tzn. przed błędem) to robi; w przypadku, gdy zostanie wstawiony po kodzie błędu, nie będzie wiązał się z programem obsługi, więc zdarzenia nie będą działać.

+0

To nie powinno wpływać na operacje asynchroniczne. Kewlio. –

+0

Co powiecie na bardziej skomplikowaną konfigurację z javascriptem wywołanym z wielu plików? – Kevin

+2

@Kevin: Zobacz http://jsfiddle.net/TGBYV/. Zasadniczo to samo na podstawie pliku. – pimvdb

0

Myślę, że wykonanie zatrzymuje się. Jeśli ustawisz alert po linii kodu, który się zepsuje, nie dojdziesz do alertu, co prowadzi mnie do przekonania, że ​​wykonanie się zatrzymuje. Nie jestem pewien, czy to samo dotyczy asynch XmlHtttpRequests.

1

To trochę zależy od tego, co robisz. Zwykle rzeczy przestaną działać, a jeśli używasz inteligentnej przeglądarki z konsolą, zostanie zarejestrowany komunikat o błędzie (i czasami te komunikaty o błędach są pomocne, nawet, ale nie zawsze).

UNCAUGHT EXCEPTION: SYNTAX ERROR, UNRECOGNIZED EXPRESSION: #

enter image description here

Czasami jednak rzeczy po prostu po cichu nie bez błędu lub ostrzeżenia, zwłaszcza jeśli używasz jQuery lub inną bibliotekę. Spędziłem wiele godzin, próbując rozwiązać problem, dlaczego coś działało dobrze w WebKit i Firefox, ale po cichu zawiodłem w IE i prześledziłem winowajcę do błędu PEBCAK w metodzie jQuery .append(), która próbowała wstawić jakiś niepoprawny kod HTML do DOM. To było irytujące, ponieważ wszystko inne działało dobrze, bez błędów, bez ostrzeżeń, nic, ale w IE ta jedna funkcja po prostu nie "pójdzie".

2

Kod nie jest wykonywany po wystąpieniu błędu.

function inAFunction(){ 
alert("one"); 
x = y; 
alert("two"); 
} 
inAFunction(); 

widać "jeden", ale nie "dwa"

alert("one"); 
x = y; 
alert("two"); 

zobaczysz "jeden", ale nie "dwa"

var a = { 
    b : c 
} 
alert("here"); 

widać nic.

Powiązane problemy