try {
const val = 'correct value';
(() => {
((arg = val) => {
const val = 'ignored value';
alert(arg);
})();
})();
} catch (err) {
alert(err.message || 'Unknown error');
}
ওএস এক্স ক্রোম, ওএস এক্স সাফারি, অ্যান্ড্রয়েড ক্রোম, উইন্ডোজ ক্রোম, উইন্ডোজ ফায়ারফক্স এবং এমনকি উইন্ডোজ এজতে এটি "সঠিক মান" সম্পর্কে সতর্ক করে। আইওএস সাফারি এবং আইওএস ক্রোমে এটি "ভেরিয়েবলটি খুঁজে পাচ্ছে না: ভাল" সতর্ক করে।
নিম্নলিখিত স্নিপেটগুলি আইওএসে সমস্ত কাজ করে:
ডিফল্ট আর্গুমেন্ট (স্নিপেট 2) ব্যবহার করছেন না:
try {
const val = 'correct value';
(() => {
alert(val);
(() => {
const val = 'wrong value';
})();
})();
} catch (err) {
alert(err.message || 'Unknown error');
}
নেস্টেড ফাংশন নেই (স্নিপেট 3):
try {
const val = 'correct value';
((arg = val) => {
const val = 'ignored value';
alert(val || 'wrong value');
})();
} catch (err) {
alert(err.message || 'Unknown error');
}
পরিবর্তনশীল ওভাররাইডিং নয় (স্নিপেট 4):
try {
const val = 'correct value';
(() => {
((arg = val) => {
alert(arg);
})();
})();
} catch (err) {
alert(err.message || 'Unknown error');
}
ফাংশনের পরিবর্তে স্কোপ ব্লক করুন (স্নিপেট 5):
try {
const val = 'correct value';
{
((arg = val) => {
const val = 'ignored value';
alert(arg);
})();
}
} catch (err) {
alert(err.message || 'Unknown error');
}
স্নিপেট 3 এর উপর ভিত্তি করে, এটি স্পষ্ট যে val
ইন-টি arg = val
পিতামহীন সুযোগ থেকে আসা উচিত, অভ্যন্তরীণ ফাংশনের সুযোগ নয়।
প্রথম স্নিপেটে, ব্রাউজারটি val
বর্তমান সুযোগে খুঁজে পেতে পারে না , তবে পূর্বপুরুষের স্কোপগুলি পরীক্ষা করার পরিবর্তে এটি সন্তানের সুযোগ ব্যবহার করে, যা অস্থায়ী মৃত অঞ্চলের কারণ হয়।
এটি কোনও আইওএস বাগ বা আমি সঠিক জেএস আচরণের ভুল বোঝাবুঝি করছি?
এই ত্রুটিটি আমাদের ওয়েবপ্যাক + ব্যাবেল + টিসার আউটপুটে ঘটছে, সুতরাং আমরা এই বাগটি এড়াতে কেবল কোডটি পুনরায় লিখতে পারি না।