এই কোড সহ:
function baz() {
var x = "foo";
function bar() {
debugger;
};
bar();
}
baz();
আমি এই অপ্রত্যাশিত ফলাফল পেয়েছি:
আমি যখন কোডটি পরিবর্তন করি:
function baz() {
var x = "foo";
function bar() {
x;
debugger;
};
bar();
}
আমি প্রত্যাশিত ফলাফল পেয়েছি:
এছাড়াও, যদি eval
অভ্যন্তরীণ ফাংশনের মধ্যে কোনও কল থাকে তবে আমি যেমন করতে চাই তেমনভাবে আমার পরিবর্তনশীলটি অ্যাক্সেস করতে পারি (আমি যা পাস তা বিবেচনা করে না eval
)।
এদিকে, ফায়ারফক্স ডিভাইস উভয় পরিস্থিতিতেই প্রত্যাশিত আচরণ দেয়।
ক্রোমের কী হল যে ডিবাগার ফায়ারফক্সের চেয়ে কম স্বাচ্ছন্দ্যে আচরণ করে? আমি কিছু সময়ের জন্য এই আচরণটি পর্যবেক্ষণ করেছি, সংস্করণ 41.0.2272.43 বিটা (64-বিট) পর্যন্ত to
এটি কি ক্রোমের জাভাস্ক্রিপ্ট ইঞ্জিন যখন এটি করতে পারে তখন ফাংশনগুলিকে "সমতল" করে?
উত্সাহের ব্যাপার হল যদি আমি একটি দ্বিতীয় পরিবর্তনশীল যে যোগ করা হয় ভেতরের ফাংশন উল্লেখ, x
পরিবর্তনশীল এখনো অনির্দিষ্ট করা হয়।
আমি বুঝতে পারি যে ইন্টারেক্টিভ ডিবাগারটি ব্যবহার করার সময় প্রায়শই স্কোপ এবং ভেরিয়েবল সংজ্ঞা দিয়ে প্রশ্নগুলি হয়, তবে আমার কাছে মনে হয় যে ভাষা স্পেসিফিকেশনের উপর ভিত্তি করে এই কোর্কের একটি "সেরা" সমাধান হওয়া উচিত। সুতরাং যদি আমি ক্রোম ফায়ারফক্সের চেয়ে আরও অনুকূলিত করে থাকি তবে আমি খুব কৌতূহল বোধ করি। এবং এছাড়াও এই অপ্টিমাইজেশানগুলি বিকাশের সময় সহজেই অক্ষম করা যায় কি না (সম্ভবত দেব সরঞ্জাম খোলা থাকলে তাদের অক্ষম করা উচিত?)
এছাড়াও, আমি ব্রেকপয়েন্টের পাশাপাশি debugger
বিবৃতি দিয়ে এটি পুনরুত্পাদন করতে পারি ।
debugger;
লাইন আসলে ভেতর থেকে বলা হয় না bar
। সুতরাং ডিবাগারে যখন বিরতি দেয় তখন স্ট্যাক ট্রেসটি দেখুন: স্ট্যাকট্রেসে bar
উল্লিখিত ফাংশনটি কি ? যদি আমি ঠিকই থাকি, তবে স্ট্যাকট্রেসকে বলা উচিত এটি it's নং লাইনে line, লাইন 5-তে দাঁড়িয়ে আছে
temp1
কনসোলের সাথে সংযুক্ত এবং আপনি স্কোপ এন্ট্রি অ্যাক্সেস করতে এটি ব্যবহার করতে পারেন।