इस जावास्क्रिप्ट उदाहरण को देखते हुए मैंने पाया
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
एक फंक्शन को var में असाइन करने में क्या फायदा है?
इस जावास्क्रिप्ट उदाहरण को देखते हुए मैंने पाया
var sum = function() {
var i, sum = 0;
for(i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
}
return sum;
};
एक फंक्शन को var में असाइन करने में क्या फायदा है?
जवाबों:
संक्षिप्त उत्तर, मेरा मानना है कि आप एक अनाम फ़ंक्शन को एक चर को सौंपा गया है, जैसा कि एक नामित फ़ंक्शन बनाने के विरोध में ...
function sum() {}
मतभेदों को जांचने का एक अच्छा तरीका है कॉल .ToString () उन पर और अंतर देखें या आप कंसोल कर सकते हैं। (sum.name)। एक वास्तविक नाम देगा और दूसरा कुछ भी नहीं, अर्थात् अनाम फ़ंक्शन (var को असाइन किया गया)। ऐसे भी विवरण हैं, जैसे कि var sum = function () {} रन टाइम पर परिभाषित होता है और फ़ंक्शन योग () {} पार्स समय पर परिभाषित होता है।
एक फायदा यह है कि आप किसी ब्लॉक में फ़ंक्शन डिक्लेरेशन का उपयोग नहीं कर सकते हैं। वे केवल एक फ़ाइल के शीर्ष स्तर पर या सीधे किसी अन्य फ़ंक्शन के भीतर हो सकते हैं।
if (true) {
function foo() {}
}
try {
function foo(){}
}
switch (true) {
default:
function foo(){}
}
ये सभी मानक द्वारा अनिर्दिष्ट हैं और ब्राउज़र अलग-अलग काम करते हैं, /programming/10069204/function-declarations-inside-if-else-statements देखें । इसलिए यदि आपको कभी-कभी दूसरी शैली का उपयोग करना पड़ता है, तो स्थिरता के लिए आप हमेशा ऐसा करना चाहते हैं
इसके अलावा, मुझे इस पर यकीन नहीं है, लेकिन अगर मुझे सही से याद है कि कुछ पुराने मिनिफायर्स फंक्शन डिक्लेरेशन को संभालने के लिए काफी स्मार्ट नहीं थे और उनका नाम नहीं बदला।
मैं एक जावास्क्रिप्ट विशेषज्ञ नहीं हूं, इसलिए इसे नमक के दाने के साथ लें। मुझे लगता है कि कुछ मामलों में लोग इसे स्टाइल के लिए कर सकते हैं और एक ही चीज "फंक्शन सम () {...}" लिखकर हासिल की जा सकती है
हालांकि, एक फ़ंक्शन को एक चर में असाइन करना कार्यात्मक प्रोग्रामिंग में एक बहुत शक्तिशाली तकनीक है। यदि आप OOP से परिचित हैं, तो यह कुछ हद तक बहुरूपता के समान है। एनिमल बेस क्लास और कैट / डॉग व्युत्पन्न वर्गों के क्लासिक उदाहरण के बारे में सोचें। आप उस कोड को लिख सकते हैं जो एनिमल के साथ काम करता है लेकिन जब वह किसी फ़ंक्शन को कॉल करता है, तो वह फ़ंक्शन एक उदाहरण के प्रकार के आधार पर अलग-अलग काम कर सकता है।
कार्यात्मक प्रोग्रामिंग में, आपके पास एक एल्गोरिथ्म हो सकता है जो "एक फ़ंक्शन" के साथ काम करता है लेकिन अगर आप उस फ़ंक्शन को कॉल करने के लिए एक चर का उपयोग कर रहे हैं, तो आपके पास रनटाइम पर एक अलग फ़ंक्शन असाइन करने का लचीलापन है।
उदाहरण के लिए, मान लें कि आप एक विंडो में 10,000 डेटा बिंदुओं को प्रस्तुत करने के लिए एक एल्गोरिथ्म लिखते हैं जो कि केवल 500 पिक्सेल के पार है। प्रत्येक पिक्सेल तब 20 डेटा बिंदुओं का प्रतिनिधित्व करेगा और उन्हें प्रस्तुत करने के लिए आपको उन 20 डेटा बिंदुओं को एक मान में संयोजित करने की आवश्यकता है।
तो मान लें कि आप 10,000 अंकों को प्रस्तुत करने के लिए एक एल्गोरिथ्म को परिभाषित करते हैं और यह एल्गोरिथ्म एक फ़ंक्शन चर का उपयोग करता है जिसे एग्रीगेट कहा जाता है:
...
displayValue = aggregate( numbersInOnePixel );
...
अब रनटाइम पर आपका उपयोगकर्ता यह चुन सकता है कि डेटा को कैसे एकत्रित किया जाए। आपका वास्तविक कार्य चर निम्नलिखित में से कोई भी हो सकता है:
aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}
यह ज्यादातर शैली की बात है, केवल उन स्थितियों के बाद से, जहां अंतर दिखाई देता है (सभी घोषणाओं को पूरा करने से पहले कुछ कार्यों को कॉल करना, स्ट्रींग विधि का उपयोग करना) एक तरह से कोने के मामले हैं, मेरे उत्पीड़न में।
इस var =
शैली का समर्थन करते हुए मैंने जो दलीलें सुनी हैं, उनमें से एक यह है कि यह इस बात के अनुरूप है कि आप सामान्य चर कैसे घोषित करते हैं। यह आपके द्वारा उपयोग की जाने वाली भाषा सुविधाओं की संख्या को सीमित करता है और आपके कार्यक्रम को जावास्क्रिप्ट के लिए किसी नए व्यक्ति को प्रस्तुत करना सरल बनाता है।