ES2015 এ আমি কীভাবে একটি নামযুক্ত তীর ফাংশন লিখব?
আপনি আপনার প্রশ্নের যেভাবে রায় বাতিল করেছেন তা আপনি এটি করেন: আপনি কোনও অ্যাসাইনমেন্ট বা সম্পত্তি প্রাথমিককরণের ডানদিকে রেখেছেন যেখানে ভেরিয়েবল বা সম্পত্তির নামটি জাভাস্ক্রিপ্ট ইঞ্জিন দ্বারা যুক্তিযুক্তভাবে নাম হিসাবে ব্যবহার করা যেতে পারে। এটি করার মতো অন্য কোনও উপায় নেই তবে এটি করা সঠিক এবং স্পেসিফিকেশন দ্বারা সম্পূর্ণরূপে coveredাকা রয়েছে।
প্রতি বৈশিষ্ট হিসাবে, এই ফাংশনটির একটি সত্য নাম রয়েছে sayHello:
var sayHello = name => {
console.log(name + ' says hello');
};
এটি এসাইনমেন্ট অপারেটর> রানটাইম শব্দার্থক: মূল্যায়ন যেখানে এটি বিমূর্ত SetFunctionNameঅপারেশনকে কল করে (এটি কলটি বর্তমানে পদক্ষেপে 1.eiii))
অবিচ্ছিন্নভাবে, রানটাইম শব্দার্থক: সম্পত্তি সংজ্ঞা মূল্যায়ন কল করে SetFunctionNameএবং এই ফাংশনটিকে একটি সত্য নাম দেয়:
let o = {
sayHello: name => {
console.log(`${name} says hello`);
}
};
আধুনিক ইঞ্জিনগুলি ইতিমধ্যে এর মত বিবরণের জন্য ফাংশনের অভ্যন্তরীণ নাম সেট করে; nameএকটি রানটাইম পতাকার পিছনে ফাংশনের উদাহরণ হিসাবে এজ এখনও বিটটি উপলব্ধ করে।
উদাহরণস্বরূপ, ক্রোম বা ফায়ারফক্সে ওয়েব কনসোলটি খুলুন এবং তারপরে এই স্নিপেটটি চালান:
"use strict";
let foo = () => { throw new Error(); };
console.log("foo.name is: " + foo.name);
try {
foo();
} catch (e) {
console.log(e.stack);
}
ক্রোম ৫১ এবং তারপরে এবং ফায়ারফক্স ৫৩ এবং তার উপরে (এবং একটি পরীক্ষামূলক পতাকা সহ ১৩ এবং তার বেশি প্রান্তে) আপনি যখন এটি চালান, আপনি দেখতে পাবেন:
foo.name হ'ল: foo
ত্রুটি
Foo এ (http://stacksnippets.net/js:14:23)
http://stacksnippets.net/js 17:38 এ
নোট করুন foo.name is: fooএবং Error...at foo।
ক্রোম ৫০ এবং তার আগে, ফায়ারফক্স ৫২ এবং তার আগে এবং পরীক্ষামূলক পতাকা ছাড়াই এজ, আপনি এটি পরিবর্তে দেখতে পাবেন কারণ তাদের কাছে নেই Function#name সম্পত্তি নেই (এখনও):
foo.name হ'ল:
ত্রুটি
Foo এ (http://stacksnippets.net/js:14:23)
http://stacksnippets.net/js 17:38 এ
মনে রাখবেন যে, নাম থেকে অনুপস্থিত foo.name is:, কিন্তু এটা করা হয় স্ট্যাক ট্রেস দেখানো। এটি ঠিক যে ফাংশনে name সম্পত্তি বাস্তবায়ন করা অন্যান্য কিছু ES2015 বৈশিষ্ট্যের তুলনায় নিম্ন অগ্রাধিকার ছিল; ক্রোম এবং ফায়ারফক্স এখন এটি আছে; এজটির পতাকার পিছনে এটি রয়েছে, সম্ভবত এটি পতাকাটির পিছনে বেশি দিন থাকবে না।
স্পষ্টতই, আমি এই ফাংশনটি সংজ্ঞায়িত করার পরেই ব্যবহার করতে পারি
সঠিক। তীর ফাংশনগুলির জন্য কোনও ফাংশন ডিক্লেয়ারেশন সিনট্যাক্স নেই , কেবল ফাংশন এক্সপ্রেশন সিনট্যাক্স এবং ফাংশন এক্সপ্রেশন নামের একটি পুরানো স্টাইলে নামের সমান কোনও তীর নেই var f = function foo() { };। সুতরাং এর সমতুল্য নেই:
console.log(function fact(n) {
if (n < 0) {
throw new Error("Not defined for negative numbers");
}
return n == 0 ? 1 : n * fact(n - 1);
}(5)); // 120
আপনাকে এটিকে দুটি এক্সপ্রেশন ভাঙতে হবে (আমি তর্ক করব যে আপনার যাইহোক এটি করা উচিত ) :
let fact = n => {
if (n < 0) {
throw new Error("Not defined for negative numbers.");
}
return n == 0 ? 1 : n * fact(n - 1);
};
console.log(fact(5));
অবশ্যই, যদি আপনি এটি একটি জায়গায় রাখতে চান যেখানে একটি একক অভিব্যক্তি প্রয়োজন, আপনি সর্বদা ... একটি তীর ফাংশন ব্যবহার করতে পারেন:
console.log((() => {
let fact = n => {
if (n < 0) {
throw new Error("Not defined for negative numbers.");
}
return n == 0 ? 1 : n * fact(n - 1);
};
return fact(5);
})()); // 120
আমি বলার অপেক্ষা রাখে না 'এটি বেশ সুন্দর, তবে এটি যদি আপনার একেবারে, ইতিবাচকভাবে একটি একক অভিব্যক্তি মোড়কের প্রয়োজন হয় তবে এটি কাজ করে।