ব্লক স্কোপিং সহ জাভাস্ক্রিপ্ট ডিফল্ট আর্গুমেন্টগুলি কেবল আইওএসে ব্যর্থ


9

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বর্তমান সুযোগে খুঁজে পেতে পারে না , তবে পূর্বপুরুষের স্কোপগুলি পরীক্ষা করার পরিবর্তে এটি সন্তানের সুযোগ ব্যবহার করে, যা অস্থায়ী মৃত অঞ্চলের কারণ হয়।

এটি কোনও আইওএস বাগ বা আমি সঠিক জেএস আচরণের ভুল বোঝাবুঝি করছি?

এই ত্রুটিটি আমাদের ওয়েবপ্যাক + ব্যাবেল + টিসার আউটপুটে ঘটছে, সুতরাং আমরা এই বাগটি এড়াতে কেবল কোডটি পুনরায় লিখতে পারি না।

উত্তর:


3

আমি মনে করি এটি পরম ডিফল্ট মান এবং তাদের টিডিজেডের বগি বাস্তবায়নের একটি অযাচিত ফলাফল । আমি সন্দেহ করি যে আইওএস সাফারি মনে করে যে আপনি এমন কিছু অর্পণ করার চেষ্টা করছেন যা আপনি এখনও শুরু করেননি।

রেফারেন্সের জন্য - ত্রুটির অবস্থান:

এখানে চিত্র বর্ণনা লিখুন


কার্যতালিকা 1 ডিফল্ট প্যারাম এবং বহিরাগত স্কোপের এক হিসাবে একই নামের কোনও অভ্যন্তরীণ স্কোপ কনটকে আরম্ভ করবেন না name

try {
    const val = 'correct value';
    (() => {
        ((arg = val) => {
            const val_ = 'ignored value';       // <----
            alert(arg);
        })();
    })();
} catch (err) {
    console.error(err);
    console.error('msg', err.message || 'Unknown error');
}

কর্মক্ষেত্র 2

জোর constকরে let:

try {
    let val = 'correct value';                 // <----
    (() => {
        ((arg = val) => {
            const val = 'ignored value';
            alert(arg);
        })();
    })();
} catch (err) {
    console.error(err);
    console.error('msg', err.message || 'Unknown error');
}

কার্যতালিকা 3const val একেবারে অন্তর্নিহিত বন্ধকে পুনরায় পুনর্নির্মাণ করবেন না :

try {
    const val = 'correct value';
    (() => {
        ((arg = val) => {
            // const val = 'ignored value';      // <--
            alert(arg);
        })();
    })();
} catch (err) {
    console.error(err);
    console.error('msg', err.message || 'Unknown error');
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.