पेकका जो कहते हैं वह सही है, लेकिन मैं एक उदाहरण के साथ थोड़ा विस्तार करना चाहता हूं जो किसी को समझाने में मदद करेगा जो फ़ंक्शन पॉइंटर्स या प्रतिनिधियों को पूरी तरह से नहीं समझता है।
मैं उपयोग नहीं करूंगा 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निष्पादित किया जाता है और रिटर्न मान असाइन किया retजाता है - 12 के बराबर हो जाता है।
आइए कोशिश करते हैं कि फिर से एक अलग तरीका:
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आपके स्वयं के फ़ंक्शन के बारे में इससे अधिक विशेष कुछ भी नहीं है। केवल थोड़ी अलग बात यह है कि इसे लोड होने पर खिड़की से बुलाया जाता है। [डिस्क्लेमर: मैंने वास्तव में कभी खिड़की के काम नहीं किए हैं, इसलिए मुझे यकीन नहीं है कि इससे नकारात्मक नतीजे मिलेंगे। एक उम्मीद है कि वे यह देखने के लिए जाँच करेंगे कि क्या किसी फ़ंक्शन को कॉल करने से पहले असाइन किया गया है 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()?