2017-08-12 12 views
5

मैं प्रतिक्रिया स्रोत के माध्यम से देख रहा था और var emptyFunction = require('fbjs/lib/emptyFunction'); के साथ एक आवश्यकता में ठोकर खाई।एफबीजेएस में कौन सा उद्देश्य कार्य करता है?

मैंने इस समारोह को देखा और यह क्या करता है उससे उलझन में था।

यहाँ समारोह

function makeEmptyFunction<T>(arg: T): (...args: Array<any>) => T { 
    return function() { 
    return arg; 
    }; 
} 

const emptyFunction: (...args: Array<any>) => void = function() {}; 

टिप्पणियों में, वे निम्नलिखित विवरण जो मैं से उलझन में था देना है:

इस समारोह स्वीकार करता है और आदानों को छोड़ देता है; इसका कोई दुष्प्रभाव नहीं है। यह overridable समारोह अंतिमबिंदुओं जो हमेशा प्रतिदेय होने की जरूरत के लिए मुहावरे मुख्य रूप से उपयोगी है के बाद से जे एस कोको आला एक अशक्त-फोन मुहावरा का अभाव

मैं अशक्त कॉल मुहावरा भर में कभी नहीं आई है और किसी को उम्मीद थी सकता है स्पष्ट करें कि इसका अर्थ क्या है और कम तकनीकी भाषा में इस फ़ंक्शन के उद्देश्य को समझाएं।

उम्मीद है कि यह प्रश्न नीचे नहीं देखा जाएगा क्योंकि यह वास्तव में कोड से संबंधित नहीं है। शायद यह कहीं और संबंधित है, अगर ऐसा है तो मुझे खेद है।

उत्तर

4

जावास्क्रिप्ट में प्रोग्रामिंग करते समय, हम एक निश्चित ऑपरेशन के लिए पैरामीटर के रूप में कार्य कर सकते हैं। उदाहरण के तौर पर, किसी फ़ंक्शन में कॉलबैक हो सकता है जिसे किसी प्रकार की घटना के बाद बुलाया जाता है।

function doIt(callback) { 
    // some work 
    callback(); 
    // more work 
} 

अब अगर इस callback एक वैकल्पिक पैरामीटर है और यह से उपलब्ध नहीं है, तो हम Uncaught TypeError: callback is not a function त्रुटि प्राप्त होगी क्योंकि कॉलबैक अनिर्धारित रहता है। इस मुद्दे के दो समाधान हैं। स्पष्ट if कथन के साथ callback की जांच कर रहा है। एक अन्य विकल्प callback के डिफ़ॉल्ट मान के रूप में एक खाली फ़ंक्शन सेट किया गया है, यदि यह असाइन नहीं किया गया है। यह दृष्टिकोण बहुत उपयोगी है और चमकता है यदि हमारे पास कई स्थान हैं जो callback फ़ंक्शन का आह्वान करते हैं। तो हमें इसे कॉल करने से पहले हर बार अपरिभाषित करने की आवश्यकता नहीं है।

function doIt(callback) { 
    callback = callback || function(){}; 
    // some work 
    callback(); 
    // more work 
} 

इसी तरह, उपयोग के मामलों हम overridable कार्यों चर हो सकता है जहां के बहुत सारे हैं। इन प्रकार के चर को खाली फ़ंक्शन में डिफ़ॉल्ट मान के रूप में सेट करने के लिए यह एक सामान्य पैटर्न है ताकि हम उन्हें बिना कॉल किए/ओवरराइड किए गए हों या नहीं, इस बारे में चिंता किए बिना कॉल कर सकें।

इसके अलावा, कुछ विशेष मामलों में, यह उन कार्यों के लिए उपयोगी है जो कुछ भी नहीं करते हैं बल्कि एक विशेष मूल्य लौटाते हैं। makeEmptyFunction इस तरह के कार्यों के निर्माण के लिए प्रयोग किया जाता है। असल में, यह एक ऐसा फ़ंक्शन देता है जो कुछ भी नहीं करता है लेकिन पैरामीटर पास करता है जो कभी भी देता है।

emptyFunction.thatReturnsFalse = makeEmptyFunction(false); 

आप फ़ाइल में देख सकते हैं, इसके बाद के संस्करण कोड एक खाली समारोह जो false मान देता है उत्पन्न करते हैं।

"शून्य कॉल idiom" उद्देश्य-सी/कोको प्रोग्रामिंग में हमें कुछ मिलता है। यह मूल रूप से आपको अन्य भाषाओं में जैसे किसी भी त्रुटि के बिना call a method of an uninitialized object (शून्य सूचक) की अनुमति देता है। मुझे लगता है कि लेखक ने टिप्पणी में व्याख्या करने की कोशिश की है।

चूंकि जावास्क्रिप्ट में ऐसी भाषा सुविधा नहीं है, इसलिए हम स्पष्ट रूप से खाली कार्यों का उपयोग करके इसे प्राप्त करते हैं। कुछ लोग इसे नो-ऑप या नोप कहते हैं और आप अन्य लोकप्रिय जावास्क्रिप्ट पुस्तकालयों जैसे JQuery और AngularJS में भी समान सहायक ढूंढ सकते हैं।

संबंधित मुद्दे