Bu kodla:
function baz() {
var x = "foo";
function bar() {
debugger;
};
bar();
}
baz();
Bu beklenmedik sonucu alıyorum:
Kodu değiştirdiğimde:
function baz() {
var x = "foo";
function bar() {
x;
debugger;
};
bar();
}
Beklenen sonucu alıyorum:
Ayrıca, eval
iç işlev içinde herhangi bir çağrı varsa, değişkenime yapmak istediğim gibi erişebilirim (ne ilettiğim önemli değil eval
).
Bu arada, Firefox dev araçları her iki durumda da beklenen davranışı verir.
Hata ayıklayıcının Firefox'tan daha az uygun davrandığı Chrome'da ne var? Bu davranışı 41.0.2272.43 beta (64-bit) sürümüne kadar bir süredir gözlemledim.
Chrome'un javascript motoru işlevleri mümkün olduğunca "düzleştirir" mi?
İkinci bir değişken eklemek İlginçtir eğer bir iç fonksiyonu başvurulan, x
değişken hala tanımlanmamış.
Etkileşimli bir hata ayıklayıcı kullanırken genellikle kapsam ve değişken tanımlamalı tuhaflıklar olduğunu anlıyorum, ancak bana öyle geliyor ki, dil spesifikasyonuna dayanarak bu tuhaflıklar için "en iyi" bir çözüm olmalı. Bunun Chrome'un Firefox'tan başka optimizasyondan kaynaklanıp kaynaklanmadığını merak ediyorum. Ayrıca bu optimizasyonların geliştirme sırasında kolayca devre dışı bırakılıp bırakılamayacağı (belki geliştirici araçları açıkken devre dışı bırakılmaları gerekir?).
Ayrıca, bunu kesme noktalarının yanı sıra debugger
ifade ile de çoğaltabilirim .
debugger;
hattın aslında içeriden çağrılmadığını söylüyor gibi görünüyor bar
. Bu nedenle, hata ayıklayıcıda durakladığında yığın izlemeye bakın: Yığın izinde bar
belirtilen işlev mi? Yanılmıyorsam, o zaman StackTrace hat 9. at, çizgi 7'de, hat 5 de durdurulmuş oluyor demeliyim
temp1
Konsola yeni bir genel değişken eklenir ve bunu kapsam girişine erişmek için kullanabilirsiniz.