जावास्क्रिप्ट कार्य
जावास्क्रिप्ट कार्य केवल निष्पादन के लिए कॉल के इंतजार के दौरान कोड का एक गुच्छा संलग्न करने से अधिक सक्षम हैं। नई परिभाषाओं, निष्पादन विधियों और वाक्यविन्यास के लिए समय के साथ कार्य विकसित हुए हैं। इस पोस्ट में कुछ वर्तमान भूमिकाओं को शामिल किया जाएगा जिन्हें जावास्क्रिप्ट फ़ंक्शन ने अब तक निभाया है.
कार्यों को व्यक्त करने और परिभाषित करने के विभिन्न तरीकों को जानने की संभावना खुल जाती है अधिक इष्टतम तरीके से एक तर्क को लागू करना जावास्क्रिप्ट में। साथ ही, आप साक्षात्कार के प्रश्नों का उत्तर अधिक आसानी से दे सकते हैं.
समारोह अभिव्यक्तियाँ
जब आप केवल एक फ़ंक्शन के साथ बताते हैं समारोह
कीवर्ड, वैकल्पिक पैरामीटर और कोड का शरीर, यह एक है समारोह घोषणा.
उस घोषणा को एक जावास्क्रिप्ट अभिव्यक्ति (जैसे असाइनमेंट या अंकगणितीय अभिव्यक्ति में) में रखें, यह एक बन जाता है समारोह अभिव्यक्ति.
// फ़ंक्शन घोषणा फ़ंक्शन function_name () ; // फ़ंक्शन अभिव्यक्ति var फ़ंक्शन_name = फ़ंक्शन () ;
मूल्यांकन के दौरान सभी जावास्क्रिप्ट घोषणाओं को फहराया जाता है (दायरे में ऊपर ले जाया जाता है)। इसलिए फंक्शन डिक्लेरेशन से पहले एक फंक्शन कॉल लिखना ठीक है (क्योंकि डिक्लेरेशन को किसी भी तरह आगे बढ़ाया जाएगा).
function_name (); // function call [WORKS] फ़ंक्शन function_name () ;
फ़ंक्शंस एक्सप्रेशंस हालांकि फहराए नहीं गए हैं क्योंकि फ़ंक्शंस अभिव्यक्ति का हिस्सा बन गए हैं और स्टैंड-अलोन घोषणाएं नहीं हैं.
function_name (); // function call [WON'T WORK] var function_name = function () ;
तुरंत फंक्शन अभिव्यक्ति (IIFE)
यह एक फ़ंक्शन एक्सप्रेशन है, जिसके कोड को तुरंत निष्पादित किया जाता है (केवल एक बार जब इसका मूल्यांकन किया जाता है)। आप बस जोड़कर एक बना सकते हैं ()
(सिंटैक्स एक फ़ंक्शन को कॉल करने के लिए उपयोग किया जाता है) एक फ़ंक्शन अभिव्यक्ति के ठीक बाद। वे अनाम हो सकते हैं (इसके साथ कॉल करने के लिए कोई नाम नहीं).
IIFE बनाने के लिए नीचे दो सबसे आम वाक्यविन्यास हैं:
(फ़ंक्शन वैकल्पिक_फंक्शन_नाम () // बॉडी ());
तथा
(फ़ंक्शन वैकल्पिक_फंक्शन_नाम () // शरीर) ();
फंक्शन डिक्लेरेशन के आसपास कोष्ठक इसे अभिव्यक्ति में परिवर्तित करता है और फिर जोड़ देता है ()
इसके बाद यह फ़ंक्शन को कॉल करता है। जब तक आप जोड़ते हैं, तब तक आप IIFE बनाने के लिए अन्य तरीकों का उपयोग कर सकते हैं ()
एक समारोह अभिव्यक्ति के बाद (नीचे की तरह), लेकिन पसंदीदा तरीके उपरोक्त दो हैं.
// IIFEs बनाने के कुछ तरीके! फंक्शन () / * ... * / (); + फ़ंक्शन () / * ... * / (); नया कार्य () / * ... * /;
IIFE कोड लिखने के लिए आदर्श है जिसे केवल एक बार निष्पादित करने, नाम बदलने, क्लोजर बनाने, निजी चर बनाने और बहुत कुछ करने की आवश्यकता है। नीचे IIFE उपयोग का एक उदाहरण है.
var page_language = (function () var lang; // कोड को पेज वापसी की भाषा पाने के लिए;) ();
पृष्ठ की भाषा को प्राप्त करने के लिए कोड केवल एक बार निष्पादित होता है (अधिमानतः पृष्ठ लोड होने के बाद)। परिणाम में संग्रहीत है page_language
बाद में उपयोग के लिए.
तरीके
जब कोई कार्य किसी वस्तु का गुण होता है, तो उसे विधि कहा जाता है। चूँकि एक फ़ंक्शन भी एक ऑब्जेक्ट है, एक फ़ंक्शन के अंदर एक फ़ंक्शन भी एक विधि है। नीचे ऑब्जेक्ट के अंदर एक विधि के लिए एक उदाहरण है.
var calc = add: function (a, b) return a + b, sub: function (a, b) return a-b कंसोल.लॉग (calc.add (1,2)); // 3 कंसोल.लॉग (कैलसब (80,2)); // 78
जोड़ना
तथा उप
कार्यों के तरीके हैं calc
वस्तु.
अब फंक्शन उदाहरण के लिए एक फंक्शन के लिए:
function add (a) return function (b) return a + b; कंसोल.लॉग (add (1) (2)); // आउटपुट 3 है
लौटाया गया अनाम फ़ंक्शन फ़ंक्शन का एक तरीका है जोड़ना
.
नोट: चूंकि पैरामीटर (ए
) समारोह का जोड़ना
उपरोक्त उदाहरण में निम्नलिखित फ़ंक्शन आह्वान के लिए उपलब्ध है, इस प्रकार की प्रक्रिया को कहा जाता है currying.
कंस्ट्रक्टर्स
जब आप जोड़ते हैं नया
किसी फ़ंक्शन से पहले कीवर्ड और इसे कॉल करने पर, यह एक कंस्ट्रक्टर बन जाता है जो इंस्टेंस बनाता है। नीचे एक उदाहरण है जहां निर्माणकर्ताओं का उपयोग उदाहरण बनाने के लिए किया जाता है फल
और मूल्यों को प्रत्येक में जोड़ा जाता है फल
के गुण.
फल () var नाम, परिवार; // वैज्ञानिक नाम और परिवार this.getName = function () रिटर्न नाम;; this.setName = function (value) name = value; this.getFamily = function () वापसी परिवार;; this.setFamily = function (value) family = value; var सेब = नया फल (); Apple.setName ("मालुस डोमेस्टिका"); apple.setFamily ( "Rosaceae"); संतरे = नए फल (); Orange.setName ("साइट्रस à ?? à ?? Ã।"¢Â ??  ?? sinensis "); ऑरेंज.सेट फ़ैमिली (" रटैसी "); कंसोल.लॉग (ऑरेंज.गेटनाम ()); //" साइट्रस एक ??  ?? â ??  ?? sinensis "कंसोल.लॉग (apple.getName ()); //" मलुस डोमेस्टिका "कंसोल.लॉग (ऑरेंज.गेटफैमिली ()); //" रटैसी "
एरो फ़ंक्शंस (ES6 Standard) [केवल फ़ायरफ़ॉक्स में]
ES6 मानक से एक नई फ़ंक्शन परिभाषा फ़ंक्शन अभिव्यक्ति के लिए एक छोटा वाक्यविन्यास प्रदान करती है। वाक्य-विन्यास है
() => / * शरीर * /
यह नमूना समारोह:
var sing = function () कंसोल.लॉग ('गायन ...');
के समान है:
var sing = () => कंसोल.लॉग ('गायन ...');
एरो फ़ंक्शंस गुमनाम हैं और इसका अपना नहीं है इस
मूल्य, इस
अंदर ऐसा ही होगा इस
संलग्नक कोड में। इसके अलावा, आप इसे किसी निर्माता के साथ नहीं बदल सकते नया
कीवर्ड.
जब आप चाहें तब वे उपयोगी हैं इस
एक फ़ंक्शन के अंदर बाहर के समान होने के लिए और इसका छोटा सिंटैक्स फ़ंक्शन संक्षिप्त के भीतर फ़ंक्शन लिखने के लिए कोड बनाता है (नीचे की तरह)
setInterval (फ़ंक्शन () कंसोल.लॉग ('संदेश'), 1000);
में
setInterval () => कंसोल.लॉग ('संदेश'), 1000);
जेनरेटर के कार्य (ES6 Standard) [केवल फ़ायरफ़ॉक्स में]
ईएस 6 स्टैंडर्ड से एक और नई फ़ंक्शन परिभाषा जेनरेटर फंक्शन है। जेनरेटर के कार्य रुकने और इसके निष्पादन को जारी रखने में सक्षम हैं। इसका सिंटैक्स है:
समारोह * function_name ()
या
समारोह * function_name ()
जनरेटर के कार्य पुनरावृत्तियों का निर्माण करते हैं। इटरेटर का आगामी
विधि का उपयोग तब तक जनरेटर फ़ंक्शन के अंदर कोड को निष्पादित करने के लिए किया जाता है प्राप्ति
कीवर्ड पहुँच गया है। उसके बाद, iterated मान द्वारा पहचाना गया प्राप्ति
कीवर्ड जनरेटर फ़ंक्शन द्वारा वापस आ जाता है और निष्पादन रोक दिया जाता है.
जब जनरेटर फ़ंक्शन फिर से निष्पादित होता है आगामी
विधि को अगले तक कहा जाता है प्राप्ति
कीवर्ड पहुँच गया है। एक बार के सभी प्राप्ति
अभिव्यक्तियों को निष्पादित किया जाता है, उपज मूल्य रिटर्न अपरिभाषित
.
नीचे एक सरल उदाहरण दिया गया है:
समारोह * जनरेटर_फंच (गिनती) के लिए (संस्करण i = 0; मैंयहाँ एक और उदाहरण है:
समारोह * randomIncrement (i) उपज i + 3; उपज i + 5; उपज i + 10; उपज i + 6; var itr = randomIncrement (4); console.log (। itr.next () मान); // 7 कंसोल.लॉग (itr.next () मान); // 9 कंसोल.लॉग (itr.next () मान); // 14वहाँ भी एक है
प्राप्ति*
अभिव्यक्ति जो किसी अन्य जनरेटर फ़ंक्शन के लिए मान पास करती हैकार्य * फल (फल) उपज * सब्जी (फल); उपज "अंगूर"; फ़ंक्शन * veggies (फल) उपज फल + "और पालक"; उपज फल + "और ब्रोकोली"; उपज फल + "और ककड़ी"; var itr = फल ("Apple"); console.log (। itr.next () मान); // "Apple और पालक" कंसोल.लॉग (itr.next ()। मूल्य); // "Apple और ब्रोकोली" कंसोल.लॉग (itr.next ()। मूल्य); // "एप्पल और ककड़ी" कंसोल.लॉग (itr.next () मूल्य); // "अंगूर" कंसोल.लॉग (itr.next () मूल्य); // अपरिभाषितजेनरेटर के कार्य उपयोगी होते हैं, यदि आप कोड में अपने पसंदीदा बिंदु पर एक-एक करके मानों को रोकना चाहते हैं, तो इसे रोकें, न कि एक सरणी के माध्यम से लूपिंग की तरह।.
निष्कर्ष
मैंने नीचे संदर्भों की एक सूची शामिल की है, जहां आपको उन संदर्भों और लेखों के लिंक मिलेंगे जो अलग-अलग विषयों पर गहराई से जाते हैं. दोनों ES6 मानक कार्य फिलहाल फ़ायरफ़ॉक्स में ही काम करेंगे.
संदर्भ
- ECMAScript भाषा: कार्य और कक्षाएं
- तुरंत-आमंत्रित समारोह अभिव्यक्ति (IIFE)
- ES6 जेनरेटर की मूल बातें
- तीर कार्य
- समारोह - मोज़िला डेवलपर नेटवर्क