function function এ ফাংশন ঘোষণার বিষয়ে বিভ্রান্ত


18

var a;
if (true) {
  a = 5;

  function a() {}
  a = 0;
  console.log(a)
}
console.log(a)

আমি উপরের কোডটি দেখেছি, একটি ফাংশন declared declared এ ঘোষণা করা হয়েছে} আমি মনে করি এটি 0 0 প্রিন্ট করবে তবে এটি 0 0 মুদ্রণ করবে



1
কড়া মোডে, এটি লগ হয় 0 undefined
নির্দিষ্ট পারফরম্যান্স

@ নির্মাতাদের পারফরম্যান্স ভাল, এটি ব্যাখ্যাযোগ্য তবে আমি এটি ব্যাখ্যা করতে ব্যর্থ হলাম যা a = 5এই ব্লকটি ফেলেছে । দুপাতে বেরগি অনুসারে function aউত্তোলন করা হবে।
জোনাস উইলস

2
মনে হয় যেন স্থানীয়ভাবে স্কোপড ব্লক ভেরিয়েবলটি ফাংশন ঘোষণায় পৌঁছানোর সময় বাইরের ব্লকের সাথে অনুলিপি করা হয়।
জোনাস উইলমস

উত্তর:


13

নিম্নলিখিত ঘটে:

(1) দুটি পরিবর্তনশীল ঘোষণা রয়েছে a, একটি ব্লকের ভিতরে এবং এর বাইরে একটি।

(২) ফাংশন ঘোষণাটি উত্তোলন হয়ে যায় এবং অভ্যন্তরীণ ব্লকগুলি পরিবর্তনশীল হতে বাধ্য bound

(3) a = 5পৌঁছেছে, যা ব্লক ভেরিয়েবলকে ওভাররাইড করে।

(4) ফাংশন ঘোষণাটি পৌঁছেছে এবং ব্লক ভেরিয়েবলটি বহিরাগত ভেরিয়েবলে অনুলিপি করা হয়। দু'জনেরই এখন বয়স 5।

(5) a = 0এ পৌঁছেছে, যা ব্লক ভেরিয়েবলকে ওভাররাইড করে। বাইরের ভেরিয়েবল এর দ্বারা প্রভাবিত হয় না।

 var a¹;
 if (true) {
   function a²() {} // hoisted
   a² = 5;
   a¹ = a²; // at the location of the declaration, the variable leaves the block      
   a² = 0;
  console.log(a²)
}
console.log(a¹);

এটি আসলে সত্যিই স্পেসিফিকেশন অংশ, এটি একটি অংশ হয়, ওয়েব উত্তরাধিকার সামঞ্জস্য শব্দার্থবিদ্যা , তাই ব্লক ভিতরে ফাংশন ঘোষণা করছে না এবং এই ভাবে আচরণ করে এই কোড উপর নির্ভর করে না

এটি এখানেও ব্যাখ্যা করা হয়েছে


তবে কেন একবার ফাংশন ঘোষণার পরে, ব্লক ভেরিয়েবলটি বহিরাগত ভেরিয়েবলে অনুলিপি করা হবে?
Chor

@ চোর নো, অনুমানটি তাই বলেছে। কেন আমি জানি না।
জোনাস উইলমস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.