একটি উদাহরণ একটি বন্ধ জড়িত জড়িত, অন্য না। ক্লোজারগুলি প্রয়োগ করা কৌতূহলোদ্দীপক, যেহেতু বন্ধ ওভার ভেরিয়েবলগুলি সাধারণ ভেরিয়েবলগুলির মতো কাজ করে না। এটি সি এর মতো নিম্ন-স্তরের ভাষায় আরও সুস্পষ্ট, তবে আমি জাভাস্ক্রিপ্ট ব্যবহার করব এটি চিত্রিত করার জন্য।
একটি বন্ধ শুধুমাত্র একটি ফাংশন নিয়ে গঠিত হয় না, তবে এটি বন্ধ হয়ে যায় এমন সমস্ত ভেরিয়েবলগুলির মধ্যেও। যখন আমরা এই ফাংশনটি শুরু করতে চাই, তখন আমাদের সমস্ত বন্ধ ওভার ভেরিয়েবলগুলি সরবরাহ করতে হবে। আমরা কোনও ফাংশন দ্বারা এমন একটি ক্লোজারের মডেল করতে পারি যা কোনও অবজেক্টকে প্রথম যুক্তি হিসাবে গ্রহণ করে যা এই বদ্ধ ভেরিয়েবলগুলিকে উপস্থাপন করে:
function add(vars, y) {
vars.x += y;
}
function getSum(vars) {
return vars.x;
}
function makeAdder(x) {
return { x: x, add: add, getSum: getSum };
}
var adder = makeAdder(40);
adder.add(adder, 2);
console.log(adder.getSum(adder)); //=> 42
এর closure.apply(closure, ...realArgs)
জন্য প্রয়োজনীয় বিশ্রী কলিং কনভেনশনটি নোট করুন
জাভাস্ক্রিপ্টের অন্তর্নির্মিত অবজেক্ট সমর্থন স্পষ্ট vars
যুক্তি বাদ দেওয়া সম্ভব করে তোলে এবং এর this
পরিবর্তে আমাদের ব্যবহার করতে দেয় :
function add(y) {
this.x += y;
}
function getSum() {
return this.x;
}
function makeAdder(x) {
return { x: x, add: add, getSum: getSum };
}
var adder = makeAdder(40);
adder.add(2);
console.log(adder.getSum()); //=> 42
এই উদাহরণগুলি ক্লোজারগুলি ব্যবহার করে এই কোডটির সমতুল্য:
function makeAdder(x) {
return {
add: function (y) { x += y },
getSum: function () { return x },
};
}
var adder = makeAdder(40);
adder.add(2);
console.log(adder.getSum()); //=> 42
এই শেষ উদাহরণে, অবজেক্টটি কেবল দুটি ফেরত ফাংশনকে গোষ্ঠী হিসাবে ব্যবহার করা হয়; this
বাঁধাই অপ্রাসঙ্গিক। ক্লোজারগুলি সম্ভব করার সমস্ত বিবরণ - প্রকৃত ফাংশনে লুকানো ডেটাগুলিতে প্রেরণ করা, সমস্ত অ্যাক্সেসগুলি ক্লোজার ভেরিয়েবলগুলিকে সেই গোপনীয় ডেটাতে লুপআপে পরিবর্তন করা - ভাষা দ্বারা যত্ন নেওয়া হয়।
তবে ক্লোজারকে কল করা সেই অতিরিক্ত ডেটাতে যাওয়ার ওভারহেডের সাথে জড়িত থাকে এবং একটি ক্লোজার চালানো সেই অতিরিক্ত ডেটাতে লুকআপের ওভারহেডের সাথে জড়িত - খারাপ ক্যাশে লোকাল দ্বারা আরও খারাপ করা হয় এবং সাধারণ ভেরিয়েবলের সাথে তুলনা করার সময় সাধারণত একটি পয়েন্টার অবলম্বন হয় - এতে অবাক হওয়ার কিছু নেই একটি সমাধান যা ক্লোজারগুলির উপর নির্ভর করে না আরও ভাল সম্পাদন করে। বিশেষত যেহেতু আপনার বন্ধকরণ আপনাকে যা কিছু করতে সংরক্ষণ করে তা হ'ল কয়েকটি অতি সস্তার পাটিগণিত ক্রিয়াকলাপ, যা পার্সিংয়ের সময় ধ্রুবকযুক্তও হতে পারে।