`ফাংশন foo () {}` এর পরিবর্তে কেন কনস্ট foo = () => {} use ব্যবহার করবেন


12

উদাহরণস্বরূপ, এই রেডাক্স ভিডিওতে প্রশিক্ষক সর্বদা পছন্দসই সিনট্যাক্স ব্যবহার করেন

const counter = (state=0, action) => {
   ... function body here
}

যেখানে আমি কেবল "traditionalতিহ্যবাহী" ব্যবহার করব

function counter(state=0, action) {
   ... function body here
}

যা আসলে সংক্ষিপ্ত এবং আইএমও, আরও পরিষ্কার। "" ফাংশন "শব্দের জন্য পৃষ্ঠার মোটামুটি সমান এবং কাঠামোগত বাম প্রান্তটি স্ক্যান করা সহজ" ছোট "=>" র্যাজেদী ডান প্রান্তটি স্ক্যান করার চেয়ে।

অন্য চেয়ে this, এবং উদ্দেশ্য নয় মতামত হতে চেষ্টা, সেখানে অযথা নূতনের পক্ষপাতী সিনট্যাক্স কিছু দরকারী পার্থক্য বা সুবিধা কি?


3
: Stackoverflow উপর এই প্রশ্নের আপনার স্বার্থ হতে পারে stackoverflow.com/questions/34361379/...
ভিনসেন্ট Savard

3
আমি কোনও জাভাস্ক্রিপ্ট বিশেষজ্ঞ নই, তবে আমি অনুমান করছি constযে ফাংশনটি পরে আর সংজ্ঞায়িত না হয় তা নিশ্চিত করতে সহায়তা করে।
মেটাফাইট

ধন্যবাদ @ ভিনসেন্টস্যাভার্ড, এটি নিখুঁত, এবং মূলত আমি যা প্রত্যাশা করেছি: "এটি" এবং প্রোটোটাইপ / শ্রেণি স্টাফ ব্যতীত, কোনও বাস্তব পার্থক্য নেই বলে মনে হয়।
user949300

3
@ user949300 আছে হয় একটি পার্থক্য, এক MetaFight উল্লেখ করা হয়। এছাড়াও, প্রোটাইপ / "এই স্টাফ" দ্রুত সমালোচনামূলক পার্থক্যে পরিণত হয়।
মিশনফোর্ড

1
দীর্ঘ গল্প সংক্ষিপ্ত: আপনার একটি প্রান্ত-কেস সুবিধার চেয়ে পরিষ্কার এবং সংক্ষিপ্ত মূল্য দেওয়া উচিত।
ওয়েইন ব্লস

উত্তর:


11

ফাংশন স্টেটমেন্টগুলি (নামযুক্ত ফাংশন, ২ য় সিনট্যাক্স দেখানো) সম্পূর্ণ লেজিকাল স্কোপের শীর্ষে তোলা হয়, এমনকি স্বেচ্ছাসেবী এবং নিয়ন্ত্রণ ব্লকের পিছনে থাকা ifবিবৃতিগুলির মতোও। একটি ভেরিয়েবল ঘোষণার জন্য const(যেমন let) ব্যবহার করা এটিকে ব্লক করার সুযোগ দেয়, পুরো উত্তোলন বন্ধ করে দেয় (কেবলমাত্র ব্লকে উত্তোলন করা), এবং নিশ্চিত করে যে এটি পুনরায় ঘোষণা করা যাবে না।

যখন স্ক্রিপ্টগুলি একসাথে বা অন্য প্যাকেজ-বিল্ডিং সরঞ্জামগুলি ব্যবহার করে ফাংশন উত্তোলন বিরোধী স্ক্রিপ্টগুলিকে এমনভাবে বিরতি দিতে পারে যেগুলি নিঃশব্দে ব্যর্থ হওয়ায় ডিবাগ করা কঠিন। constপ্রোগ্রামটি চালুর আগে একটি পুনরায় ঘোষিত একটি ব্যতিক্রম ছুঁড়ে ফেলবে, তাই ডিবাগ করা খুব সহজ।


ধন্যবাদ। ভাল উত্তর. আমি মূলত ছোট জেএস প্রকল্পগুলি, বা নোড.জেএস সার্ভার প্রকল্পগুলিতে কাজ করেছি যেখানে তাদের নাম স্পেসিংয়ের জন্য একটি ভাল মডিউল সিস্টেম রয়েছে। তবে কেবল বান্ডিলার ব্যবহার করে আরও ক্লায়েন্ট-সাইড প্রকল্প শুরু করা এবং এটি ভাল অন্তর্দৃষ্টি।
user949300

2
কেবলমাত্র একটি নোট যে এসলিন্ট নো-ফান-অ্যাসাইন্ট এই পুনরায় ঘোষণার সমস্যাটি ধরতে পারে।
user949300

2
স্থিতিশীলভাবে টাইপিত ভাষার সুবিধা পেতে বিভ্রান্তিকর সংকেত রয়েছে এমন লিখন কোডটি টাইপস্ক্রিপ্ট ব্যবহার করার কারণ, তা নয় constconstএসএমএলটি, ওয়েবপ্যাক, ব্যাবেল ইত্যাদির যুগে এই কারণে সর্বত্র ব্যবহার শুরু করা সামান্য স্বল্পদৃষ্টি, আইএমও। এখন কমপক্ষে এক দশক ধরে কেউ আর ম্যানুয়ালি ফাইল একসাথে তৈরি করছে না।
ওয়েইন ব্লস

2

আপনার ব্যবহার করা উচিত কেন তা এখানে function:

  1. সিগন্যালিং পরিষ্কার এবং সংক্ষিপ্ত। অন্যান্য উত্তরে তালিকাভুক্ত যে কোনও এজ-কেস উত্তোলনের উদ্বেগের তুলনায় এটি অনেক বেশি উপকারী।

  2. আপনি প্রকৃতপক্ষে মডিউলগুলির মধ্যে উত্তোলন করতে চান কারণ নীচের কোড থেকে আপনি দেখতে পাচ্ছেন যে নীরবে ব্যর্থ হওয়ার constঘোষণাটি tryDoTheThingআপনি কল করার চেষ্টা না করা পর্যন্ত ধরা পড়বে না।

  3. বেশিরভাগ জুনিয়র যেটির সাথে আমি যোগাযোগ করি সেগুলি constপ্রতিটি ফাংশনটি ডিক্লেয়ার করতে শুরু করে কারণ এটি এখনই একটি ফ্যাড, যেমন ট্যাবগুলিতে স্পেস ব্যবহার করা বা functional!!!"ওওপিপ খারাপ" কারণ সমস্ত কিছু তৈরি করা । এটা করবেন না। আপনি সেই লোক হতে চান না যিনি সম্পূর্ণরূপে এর অর্থগুলি না বুঝেই ম্লান অনুসরণ করেন।

https://gist.github.com/stephenjfox/fec4c72c7f6ae254f31407295dc72074 এর মাধ্যমে


/*
This shows that, because of block-scoping, const function references must be
invoked in-order or else things will fail silently.
const's are added the name space serially (in the order in which they appear)
and much of the body isn't declared when we first try to invoke or functions
*/


const tryDoTheThing = () => {
  console.log(`This is me trying to be awesome ${getAwesome()}`)
}


// "getAwesome is not defined", because it is referenced too early
tryDoTheThing() // comment to see the rest work


const getAwesome = () => (+((Math.random() * 10000).toString().split('.')[0]))


const doTheThing = () => {
  console.log(`This is awesome! ${getAwesome()}`)
}

doTheThing() // prints

বনাম

/*
Function declarations are given two passes, where the first lifts them to
the top of the namespace, allowing "out of order" usage
*/

doTheThing();


function doTheThing() {
  console.log(`This is awesome number ${getAwesome()}`)
}

function getAwesome() {
  return (+((Math.random() * 10000).toString().split('.')[0]))
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.