পেক্কা যা বলেছেন তা সঠিক, তবে আমি একটি উদাহরণ দিয়ে আরও কিছুটা ব্যাখ্যা করতে চাই যা ফাংশন পয়েন্টার বা প্রতিনিধিদের পুরোপুরি বুঝতে না পারে এমন কাউকে ব্যাখ্যা করতে সহায়তা করবে।
আমি ব্যবহার করব না window.onloadকারণ এটি প্রদর্শনের জন্য কিছুটা সংঘাতবদ্ধ। পরিবর্তে ডেমোতে আমি একটি সাধারণ গুণিত ফাংশন ব্যবহার করব:
function Multiply(operator, operand) {
return operator * operand;
}
এটি সমানভাবে লেখা যেতে পারে:
Multiply = function(operator, operand) {
return operator * operand;
}
প্রথম উদাহরণে, বোঝাটি স্পষ্ট নাও হতে পারে, দ্বিতীয় উদাহরণটি আরও স্পষ্টভাবে দেখায় যে আমরা একটি ফাংশন বরাদ্দ করছি যার নামক একটি ভেরিয়েবলের 2 পরামিতি রয়েছে Multiply, এবং কার্যাদি হিসাবে এই ধারণাটি জাভাস্ক্রিপ্ট জুড়ে সাধারণ। এটি ফাংশনগুলি "প্রথম শ্রেণির নাগরিক" হ'ল এটির একটি ছোট্ট প্রদর্শনী , এটি হ'ল আমাদের মূল্যবোধের পাশ দিয়ে চলেছে এমনভাবে হ'ল।
সুতরাং এখন নিয়োগের পার্থক্য:
var operator = 3;
var operand = 4;
var ret = Multiply(operator, operand);
রেট ভেরিয়েবল সংজ্ঞায়নের পয়েন্টে Multiplyএক্সিকিউট করা হয় এবং রিটার্নের মান নির্ধারিত হয় - ret12 এর সমান হয়।
এর আবার চেষ্টা করুন অন্যভাবে:
var operator = 3;
var operand = 4;
var ret = Multiply;
এখন, সংজ্ঞা দেওয়ার মুহুর্তে ret, retআপনার Multiplyফাংশন থেকে প্রাপ্ত ফলাফল হওয়ার বিপরীতে আপনার ফাংশন হয়ে যায় Multiply। কলগুলি ret()আপনার Multiplyক্রিয়াকলাপ কার্যকর করার কারণ ঘটায় এবং আপনি একে কল করতে ঠিক যেমন কল করতে পারেন Multiply(operator, operand):
var out = ret(3, 4);
হিসাবে একই
var out = Multiply(3, 4);
আপনি কার্যকরভাবে বলেছেন যে আপনি retএকটি প্রতিনিধি হিসাবে ব্যবহার করতে যাচ্ছেন Multiply()। কল করার সময় ret, আমরা সত্যিই Multiplyফাংশনটি উল্লেখ করছি ।
আপনার ফিরে window.onload। এটিকে এভাবে ভাবুন:
window.onload = function() {
//Doing what all good window.onload functions should do...
}
initAll = function() {
return 12;
}
আপনি যেমন দেখতে পাচ্ছেন, window.onloadঅন্য ফাংশনের মতোই এটিও একটি ফাংশন, এটি সম্পর্কে বিশেষ কিছু নেই। আপনি এটিকে একটি মূল্য নির্ধারণ করতে পারেন, এটি একটি ফাংশন বরাদ্দ করতে পারেন, আপনি ইচ্ছা করলে তা বাতিল করুন - মূল বিষয়টি হ'ল window.onloadআপনার নিজস্ব ফাংশন সম্পর্কে যা আছে তার চেয়ে বিশেষ বিশেষ কিছুই নেই । কেবল সামান্য ভিন্ন জিনিসটি এটি লোড হওয়ার পরে উইন্ডো দ্বারা ডাকা হয়। [অস্বীকৃতি: আমি উইন্ডো ফাংশনগুলিকে আসলে কখনই ছাড়িনি, সুতরাং আমি নিশ্চিত নই যে এটি নেতিবাচক প্রতিরোধ ঘটাবে কিনা I'm কেউ আশা করবে তারা এটি পরীক্ষা করার আগে কোনও ফাংশন নির্ধারিত হয়েছে কিনা তা পরীক্ষা করে দেখুন if (window.onload) window.onload();]।
এখন initAll()আমরা যা বলছি তা কল করা হচ্ছে:
window.onload = initAll();
যা পাশাপাশি বলতে পারে:
window.onload = 12;
কিন্তু যখন আমরা বলি initAllপ্রথম বন্ধনী ছাড়া, আমরা কি সত্যিই বলছে: আমি প্রতিস্থাপন করতে যাই হোক না কেন আমার window.onload ফাংশন একটি নতুন ফাংশন হল চাই - অর্থাত আমি আমার সঙ্গে এটি প্রতিস্থাপন করতে চান initAllফাংশন, যাতে কোনো কল window.onloadরান আমার initAllকোড।
তাই:
window.onload = function() {
//Doing what all good window.onload functions should do...
}
এর সাথে প্রতিস্থাপন করা হয়:
window.onload = function() {
return 12;
}
সুতরাং যে কোনও window.onloadকলই মূলত initAllযা window.onloadছিল তার পরিবর্তে আপনার ফাংশনটি কার্যকর করবে । আপনি আপনার নতুন ফাংশন দিয়ে মূল ফাংশনটি প্রতিস্থাপন করেছেন।
আসলে, আপনি পারে সমানভাবে লিখুন:
window.onload = function() {
//Write all your init code right in here instead of having a separate
//initAll function.
}
আরও একটি উদাহরণ যা আরও ভালভাবে প্রদর্শন করতে পারে তা হ'ল:
var d = new Date();
var currentTime = d.getTime();
সময়টি যা ছিল dতা নির্ধারিত শেষ পর্যন্ত নির্ধারিত currentTime। দুর্দান্ত, তবে এটি কেবলমাত্র তখনই কার্যকর যদি আমরা সেই কোডটি সম্বলিত ফাংশনটি কখন ডাকা হত - তা পৃষ্ঠা লোডের সময়টিতে জানতে চাই। আমরা যদি বর্তমান সময়ের যেকোন সময় currentTimeবলা চাই?
var currentTime = function() {
var d = new Date();
return d.getTime();
}
var a = currentTime(); //The current time at the point a is defined...
var b = currentTime; //b is a functional reference to currentTime...
var c = b(); //The current time when variable c is defined
var d = c; //The current time when variable c was defined
লক্ষ্য করুন আমরা কীভাবে আমাদের কল b()করতে পারি cএবং dঅ্যাসাইনমেন্টগুলিতে আমরা কল করতে পারি ঠিক তেমনভাবে currentTime()?