Bunun gibi sorunları görmenizin nedeni, konsolun kendisinin şu anda hedeflediğiniz bağlamın küresel kapsamını taklit etmeye çalışmasıdır. Ayrıca, konsolda yazdığınız ifadelerden ve ifadelerden gelen dönüş değerlerini yakalamaya çalışır, böylece sonuç olarak görünür. Örneğin şunu ele alalım:
> 3 + 2
< 5
Burada, sanki bir ifademiş gibi çalışır, ama siz bir ifademiş gibi yazmışsınızdır. Normal komut dosyalarında değer atılır, ancak burada kod dahili olarak yönetilmelidir (tüm ifadeyi bir işlev bağlamı ve bir return
ifade ile sarmak gibi ), bu da yaşadığınız sorunlar da dahil olmak üzere her türlü garip etkiye neden olur.
Bu, komut dosyalarındaki bazı çıplak ES6 kodunun iyi çalışmasının, ancak Chrome Dev Tools konsolunda çalışmamasının nedenlerinden biridir.
Bunu Düğüm ve Chrome konsolunda yürütmeyi deneyin:
{ let a = 3 }
Düğümde veya bir <script>
etikette iyi çalışır, ancak konsolda verir Uncaught SyntaxError: Unexpected identifier
. Ayrıca VMxxx:1
, değerlendirilen kaynağı incelemek için tıklayabileceğiniz şekilde kaynağa bir bağlantı verir, bu da şu şekilde görünür:
({ let a = 3 })
Peki bunu neden yaptı?
Cevap, sonucun arayana geri dönüp konsolda görüntülenebilmesi için kodunuzu bir ifadeye dönüştürmesi gerektiğidir. Bunu, ifadeyi bir ifade yapan parantez içinde sararak yapabilirsiniz, ancak yukarıdaki bloğu sözdizimsel olarak yanlış yapar (bir ifadenin blok bildirimi olamaz).
Konsol, kod hakkında akıllı olarak bu uç durumları düzeltmeye çalışıyor, ancak bu cevabın kapsamı dışında olduğunu düşünüyorum. Düzeltmeyi düşünecekleri bir şey olup olmadığını görmek için bir hata dosyası gönderebilirsiniz.
Çok benzer bir şeye iyi bir örnek:
https://stackoverflow.com/a/28431346/46588
Kodunuzu çalıştırmanın en güvenli yolu, bir ifade olarak çalıştırılabildiğinden emin olmak SyntaxError
ve gerçek yürütme kodunun ne olduğunu görmek için kaynak bağlantısını incelemek ve bundan bir çözüm tasarlamaktır. Genellikle bir çift stratejik olarak yerleştirilmiş parantez anlamına gelir.
Kısacası: konsol global yürütme bağlamını olabildiğince doğru bir şekilde taklit etmeye çalışır, ancak v8 motoru ve JavaScript semantiği ile etkileşimin sınırlamaları nedeniyle, bazen çözülmesi zor veya imkansızdır.