আমি শুনেছি যে অ্যাক্সেস letএবং constমানগুলি সেগুলি শুরুর আগেই অস্থায়ী ডেড জোনReferenceError নামক কোনও কারণের কারণ হতে পারে ।
টেম্পোরাল ডেড জোন কী, এটি কীভাবে সুযোগ এবং উত্তোলনের সাথে সম্পর্কিত এবং কোন পরিস্থিতিতে এটির মুখোমুখি হচ্ছে?
আমি শুনেছি যে অ্যাক্সেস letএবং constমানগুলি সেগুলি শুরুর আগেই অস্থায়ী ডেড জোনReferenceError নামক কোনও কারণের কারণ হতে পারে ।
টেম্পোরাল ডেড জোন কী, এটি কীভাবে সুযোগ এবং উত্তোলনের সাথে সম্পর্কিত এবং কোন পরিস্থিতিতে এটির মুখোমুখি হচ্ছে?
উত্তর:
letএবং এর constথেকে দুটি বিস্তৃত পার্থক্য রয়েছে var:
varএটি ঘোষণার আগে একটি অ্যাক্সেসের ফলাফল রয়েছে undefined; এটি ছুঁড়ে দেওয়ার ঘোষণার আগে letবা অ্যাক্সেস করা :constReferenceErrorconsole.log(aVar); // undefined
console.log(aLet); // causes ReferenceError: aLet is not defined
var aVar = 1;
let aLet = 2;
এই উদাহরণগুলি থেকে এটি প্রদর্শিত হয় যে letঘোষণাগুলি (এবং const, একইভাবে কাজ করে) উত্তোলন করা যাবে না , যেহেতু aLetএটি কোনও মূল্য নির্ধারিত হওয়ার আগে উপস্থিত নেই।
যে মামলা, however- নয় letএবং const করছে উত্তোলন (যেমন var, classএবং function), কিন্তু সুযোগ লিখে এবং যেখানে তারা অ্যাক্সেস করা যাবে না ঘোষিত হওয়ার মধ্যে একটি নির্দিষ্ট সময়ের নেই। এই সময়কালটি টেম্পোরাল ডেড জোন (টিডিজেড) ।
টিডিজেড নির্ধারিত পরিবর্তে ঘোষণার পরে শেষ aLetহয় :
//console.log(aLet) // would throw ReferenceError
let aLet;
console.log(aLet); // undefined
aLet = 10;
console.log(aLet); // 10
এই উদাহরণটি দেখানো হয়েছে যে letউত্তোলন করা হয়েছে:
let x = 'outer value';
(function() {
// start TDZ for x
console.log(x);
let x = 'inner value'; // declaration ends TDZ for x
}());
ক্রেডিট: টেম্পোরাল ডেড জোন (টিডিজেড) অননুমোদিত
xঅভ্যন্তরীণ সুযোগে অ্যাক্সেস এখনও একটি কারণ ReferenceError। যদি letউত্তোলন না করা হয় তবে এটি লগ হবে outer value।
টিডিজেড একটি ভাল জিনিস কারণ এটি বাগগুলি হাইলাইট করতে সহায়তা করে it কোনও মান ঘোষণার আগে অ্যাক্সেস করা খুব কমই ইচ্ছাকৃত is
টিডিজেড ডিফল্ট ফাংশন আর্গুমেন্টগুলিতেও প্রযোজ্য। আর্গুমেন্টগুলি বাম থেকে ডানদিকে মূল্যায়ন করা হয় এবং প্রতিটি যুক্তি টিডিজেডে নির্ধারিত না হওয়া পর্যন্ত থাকে:
// b is in TDZ until its value is assigned
function testDefaults(a=b, b) { }
testDefaults(undefined, 1); // throws ReferenceError because the evaluation of a reads b before it has been evaluated.
ব্যাবেল.জেএস ট্রান্সপ্লেরারে টিডিজেড ডিফল্টরূপে সক্ষম হয় না । REPL এ এটি ব্যবহার করতে "হাই কমপ্লায়েন্স" মোডটি চালু করুন । es6.spec.blockScopingসিএলআই বা লাইব্রেরি হিসাবে এটি ব্যবহার করতে পতাকা সরবরাহ করুন ।
আরও পড়ার প্রস্তাবিত: টিডিজেড ডিমেস্টিফাইড এবং ইএস 6 লেট, কনস্ট এবং গভীরতার মধ্যে "টেম্পোরাল ডেড জোন" (টিডিজেড) ।
let fooকোনও ব্লকে এটিকে উত্তোলন এবং সেই ব্লকের শীর্ষে ঘোষণা করা হয়। let fooএটির সূত্রপাত হওয়ার কারণগুলির রেখা । এবং foo = xyzএটি একটি মান নির্ধারিত করে।
উত্তোলন:
let , const, varসব পেতে উত্তোলন প্রক্রিয়া আছে।
(এর অর্থ তারা উপরে গিয়ে স্কোপের শীর্ষে ঘোষণা করে))
Initialisation:
varপ্রাথমিক প্রক্রিয়াটি দিয়েও যান এবং এর প্রাথমিক মান পান undefined।let, constপ্রাথমিক প্রক্রিয়াটি ছুঁড়ে ফেলেনি, তাই তাদের মানগুলি এখনও অ্যাক্সেসযোগ্য, যদিও তারা ইতিমধ্যে ঘোষণা করেছে। কি তাদের ভিতরে রাখাtemporal dead zoneতাই শীঘ্রই:
উত্তোলন প্রক্রিয়া:
var,let,const
Initialisation প্রক্রিয়া:var
লেট এবং কনস্টের ভেরিয়েবলের ক্ষেত্রে মূলত টেম্পোরাল ডেড জোন একটি অঞ্চল is
"আপনার পরিবর্তনশীল ঘোষণার আগে",
অর্থাৎ যেখানে আপনি এই ভেরিয়েবলের মান অ্যাক্সেস করতে পারবেন না, এটি একটি ত্রুটি ছুঁড়ে দেবে।
প্রাক্তন।
let sum = a + 5; //---------
//some other code // | ------> this is TDZ for variable a
// |
console.log(sum) //---------
let a = 5;
উপরের কোড একটি ত্রুটি দেয়
যখন আমরা ভেরিয়েবল 'এ' ব্যবহার করে ভেরিয়েবল ব্যবহার করি, একই কোডটি ত্রুটি দেয় না
প্রাক্তন।
var sum = a;
console.log(sum) //prints undefined
var a = 5;
undefinedএবং 5)। Declaratation এর var aউত্তোলন করা হয়, inifialisation কোড settng aথেকে 5 নয়।