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.