এটি ES5 বনাম ES6 এ বোঝা

আমার পূর্ববর্তী নিবন্ধগুলির বিপরীতে, এটি একটি সংক্ষিপ্ত হতে চলেছে কারণ এ সম্পর্কে বড় কিছু নেই;)

এই কীওয়ার্ডটি ফাংশনের প্রসঙ্গে প্রতিনিধিত্ব করে এবং আপনি কীভাবে ফাংশনটি কল করেন তার উপর নির্ভর করে, আপনি এটি কীভাবে সংজ্ঞা দিয়েছিলেন।

আসুন একটি সাধারণ ফাংশন দিয়ে শুরু করি। আপনি যখন বৈশ্বিক স্কোপে কোনও পরিবর্তনশীল সংজ্ঞায়িত করেন, এটি উইন্ডো অবজেক্টের অন্তর্গত। যেহেতু জাভাস্ক্রিপ্টে ফাংশনগুলি প্রথম শ্রেণীর অবজেক্ট, সেগুলিও ভেরিয়েবলগুলির মতো আচরণ করে। সুতরাং, বিশ্বব্যাপী নামের যে কোনও কার্যকারিতা (গ্লোবাল স্কোপ) উইন্ডো অবজেক্টের অন্তর্ভুক্ত। আসুন দেখুন কিভাবে।

var মান = 'হেলো';
ফাংশন শোভ্যালু ()}}
কনসোল.লগ (এটি);
কনসোল.লগ (উইন্ডো);
কনসোল.লগ ('উইন্ডো === এটি:', উইন্ডো === এটি);
কনসোল.লগ ('this.value:', this.value);
কনসোল.লগ ('this.showValue:', this.showValue);

এখন, আপনি জানেন, এটি কেবল একটি বিষয়। সুতরাং, বিশ্বব্যাপী সুযোগে, এটি উইন্ডোটিকে বোঝায়। তবে এটির মান নির্ভর করে আপনি কোথায় ডেকেছেন তার উপর নির্ভর করে।

আপনি স্ব ব্যবহার করতে পারেন যা সর্বদা বিশ্বব্যাপী সুযোগকে বোঝায় আপনি নিজের কোডটি যেখানে ব্যবহার করেছেন তা বিবেচনা করে না।

কোনও ফাংশনের অভ্যন্তরে, এটি সেই ফাংশনটির সাথে সম্পর্কিত অবজেক্টটিকে বোঝায়।

var মান = 'হেলো';
ফাংশন শোভ্যালু () {
    কনসোল.লগ ('এটি ভিতরে শোভ্যালু ফাংশনটি হ'ল:', এটি);
    কনসোল.লগ ('এটি === উইন্ডো:', এটি === উইন্ডো);
    এই ফেরান। মূল্য;
}
showValue ();

যেহেতু, শোভ্যালু ফাংশন উইন্ডো অবজেক্টের অন্তর্গত তাই এই অভ্যন্তর শোভ্যালুটি উইন্ডো অবজেক্ট। যেহেতু মানটি উইন্ডো অবজেক্টেরও অন্তর্ভুক্ত তাই এই মানটি শোভ্যালু ফাংশনের অভ্যন্তরে উইন্ডো.ভাল্যুর সমান।

এখন, আসুন অবজেক্ট সম্পর্কে কথা বলা যাক এবং কীভাবে কোনও বস্তুর অন্তর্ভুক্ত ফাংশনগুলি এই মানটিকে হার্ডকড করে।

var মান = 'উইন্ডো-মান';
var showValue = ফাংশন (সুযোগ) {
    কনসোল.লগ ('এটি এর ভিতরে' + স্কোপ + 'হ'ল:', এটি);
    কনসোল.লগ (এটি.মূল্য);
};
var অবজেক্ট = {
    মান: 'অবজেক্ট-ভ্যালু',
    showValue: showValue
};
showValue ('উইন্ডো');
অবজেক্ট.শোভ্যালু ('অবজেক্ট');

আপনি কীভাবে অবজেক্ট.শোভ্যালু কল করবেন তা বিবেচনা না করে আপনি একই ফলাফল পেতে চলেছেন। যেহেতু, অবজেক্টের অভ্যন্তরে শোভ্যালু ফাংশনটি অবজেক্টের অন্তর্গত তাই এই অভ্যন্তর শোভ্যালু ফাংশনটি অবজেক্টটিকে উল্লেখ করবে।

যদি আপনি কোনও নেস্টেড ফাংশনটি কল করেন তবে এর ডিফল্ট এই মানটি উইন্ডো।

ফ্যাট অ্যারো (ES6)

উইন্ডো স্কোপের সাথে সম্পর্কিত বিশেষত বেনাম ফাংশনগুলির সাথে কাজ করার জন্য এটি সময়ে বেদনাদায়ক হতে পারে। এর সাথে কোথায় সমস্যা দেখা দিতে পারে তা দেখুন।

var অবজেক্ট = {
    সরবরাহকারী: 'gmail.com',
    ব্যবহারকারীর নাম: ['মাইক', 'জন', 'নিনা'],
    getEmails: ফাংশন () {
        ফিরিয়ে দিন এই ইউজারনেমস.ম্যাপ (ফাংশন (ব্যবহারকারীর নাম)) {
            ব্যবহারকারীর নাম + '@' + এটি.প্রভাইডার;
        });
    }
};
var ইমেল = অবজেক্ট.জেটমেলস ();
কনসোল.লগ (ইমেল);

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

var প্রদানকারী = 'yahoo.com';
var অবজেক্ট = {
    সরবরাহকারী: 'gmail.com',
    ব্যবহারকারীর নাম: ['মাইক', 'জন', 'নিনা'],
    getEmails: ফাংশন () {
        ফিরিয়ে দিন এই ইউজারনেমস.ম্যাপ (ফাংশন (ব্যবহারকারীর নাম))
            ব্যবহারকারীর নাম + '@' + এটি.প্রভাইডার;
        });
    }
};
var ইমেল = অবজেক্ট.জেটমেলস ();
কনসোল.লগ (ইমেল);

আমি মনে করি না, আমার উপরের কিছু ব্যাখ্যা করতে হবে। সুতরাং, আমরা কীভাবে এটি ঠিক করতে পারি। কোনও পণ্যকে একটি ফাংশন বাঁধার জন্য আমরা বাইন্ড ব্যবহার করতে পারি, যাতে এই ফাংশনের ভিতরে এটি আমাদের সরবরাহ করা অবজেক্টটির দিকে নির্দেশ করে।

var প্রদানকারী = 'yahoo.com';
var অবজেক্ট = {
    সরবরাহকারী: 'gmail.com',
    ব্যবহারকারীর নাম: ['মাইক', 'জন', 'নিনা'],
    getEmails: ফাংশন () {
        ফিরিয়ে দিন এই ইউজারনেমস.ম্যাপ (ফাংশন (ব্যবহারকারীর নাম))
            ব্যবহারকারীর নাম + '@' + এটি.প্রভাইডার;
        b .বাইন্ড (এটি));
    }
};
var ইমেল = অবজেক্ট.জেটমেলস ();
কনসোল.লগ (ইমেল);

যেহেতু এই অভ্যন্তরে getEmails ফাংশনটি বস্তুটির দিকে নির্দেশ করে, অজানা ফাংশনটিতে .bind (এই) কলটি এটি এটিকে বস্তুটিতেও এটি নির্দেশ করতে বাধ্য করে।

আপনি এর মানটি একটি ভেরিয়েবল _ এও সংরক্ষণ করতে পারেন এবং বেনামে ফাংশনটির পরিবর্তে এটি ব্যবহার করতে পারেন।

ES6 এর সাহায্যে একটি বড় ত্রাণ হ'ল ফ্যাট অ্যার ফাংশনটি হ'ল এটির ভিতরে ফ্যাট তীর ফাংশনটি এর অভ্যন্তরের উপরের ফাংশনের মান যাই হোক না কেন তা নির্দেশ করে। সুতরাং এই অভ্যন্তরের তীর ফাংশনটির মানটি বর্ণনামূলকভাবে বাদ দেওয়া হয়।

var প্রদানকারী = 'yahoo.com';
var অবজেক্ট = {
    সরবরাহকারী: 'gmail.com',
    ব্যবহারকারীর নাম: ['মাইক', 'জন', 'নিনা'],
    getEmails: ফাংশন () {
        এইটি ফেরান u ব্যবহারকারীর নামগুলি ma
            ব্যবহারকারীর নাম + '@' + এটি.প্রভাইডার;
        });
    }
};
var ইমেল = অবজেক্ট.জেটমেলস ();
কনসোল.লগ (ইমেল);

আমাদের এখনও বেনামে ফাংশন রয়েছে তবে এবার ফ্যাটযুক্ত তীর সহ যা আমাদের প্রচুর সময় সাশ্রয় করে এবং বাক্য গঠনটি আরও ভাল দেখায়। এটি অনামী ফাংশনটির অভ্যন্তরে উপরের ফাংশনের এই মানটিকে নির্দেশ করে যা getEmails ফাংশন। এবং এর ভিতরে getEmails ফাংশনের মান অবজেক্ট। সুতরাং, আপনি যখন তর্ক হিসাবে তীর ফাংশনটি পাস করেন তখন এটির মানটি পূর্বনির্ধারিত হয় এবং আপনি কোথাও থেকে এটি কার্যকর করলে কোনও পার্শ্ব প্রতিক্রিয়া তৈরি হবে না।

(গিটহাব / টুইটার)