खोज…


वाक्य - विन्यास

  • केवल वापसी कॉल () या तो स्पष्ट रूप से तीर फ़ंक्शन में या स्पष्ट रूप से, एक पूंछ कॉल स्टेटमेंट हो सकती है
  • समारोह फू () {रिटर्न बार (); } // बार को कॉल एक टेल कॉल है
  • समारोह फू () {बार (); } // बार एक टेल कॉल नहीं है। जब कोई रिटर्न नहीं दिया जाता है तो फ़ंक्शन अपरिभाषित हो जाता है
  • const foo = () => बार (); // बार () एक पूंछ कॉल है
  • const foo = () => (poo (), bar ()); // पू टेल कॉल नहीं है, बार एक टेल कॉल है
  • const foo = () => poo () && बार (); // पू टेल कॉल नहीं है, बार एक टेल कॉल है
  • const foo = () => बार () + 1; // बार एक टेल कॉल नहीं है क्योंकि इसे लौटने के लिए संदर्भ की आवश्यकता है + 1

टिप्पणियों

TCO को PTC (उचित टेल कॉल) के रूप में भी जाना जाता है क्योंकि इसे ES2015 विनिर्देशों में संदर्भित किया गया है।

टेल कॉल ऑप्टिमाइज़ेशन (TCO) क्या है

TCO केवल सख्त मोड में उपलब्ध है

हमेशा किसी भी भाषा सुविधाओं के समर्थन के लिए ब्राउज़र और जावास्क्रिप्ट कार्यान्वयन की जांच करें, और किसी भी जावास्क्रिप्ट सुविधा या सिंटैक्स के साथ, यह भविष्य में बदल सकता है।

यह वैश्विक फ्रेम स्टैक पर फ़ंक्शन स्टेट को पुश करने की आवश्यकता को समाप्त करके और कॉलिंग से प्रारंभिक कॉलिंग फ़ंक्शन पर सीधे लौटने से बचने के लिए पुनरावर्ती और गहराई से नेस्टेड फ़ंक्शन कॉल को अनुकूलित करने का एक तरीका प्रदान करता है।

function a(){
   return b(); // 2
} 
function b(){
   return 1;  // 3
}
a(); // 1

TCO के बिना कॉल a() उस फ़ंक्शन के लिए एक नया फ्रेम बनाता है। जब वह फ़ंक्शन b() कॉल करता a() फ़्रेम फ्रेम स्टैक पर धकेल दिया जाता है और फ़ंक्शन b() के लिए एक नया फ़्रेम बनाया जाता है

जब b() रिटर्न a() a() का फ्रेम फ्रेम स्टैक से पॉप होता है। यह तुरंत वैश्विक फ्रेम पर लौटता है और इस प्रकार स्टैक पर किसी भी राज्य का उपयोग नहीं करता है।

TCO यह मानता है कि a() से b() फंक्शन की पूंछ पर a() और इस प्रकार फ्रेम स्टैक पर a() की स्थिति को पुश करने की कोई आवश्यकता नहीं है। जब b(0) वापस लौटने के बजाय a() लौटता है तो यह सीधे वैश्विक फ्रेम पर लौटता है। मध्यवर्ती चरणों को समाप्त करके आगे का अनुकूलन।

TCO पुनरावर्ती कार्यों के लिए अनिश्चित पुनरावृत्ति की अनुमति देता है क्योंकि फ्रेम स्टैक प्रत्येक पुनरावर्ती कॉल के साथ नहीं बढ़ेगा। TCO के बिना पुनरावर्ती कार्य की एक सीमित पुनरावर्ती गहराई थी।

नोट TCO एक जावास्क्रिप्ट इंजन कार्यान्वयन सुविधा है, इसे ट्रांसपिलर के माध्यम से लागू नहीं किया जा सकता है यदि ब्राउज़र इसका समर्थन नहीं करता है। TCO को लागू करने के लिए आवश्यक युक्ति में कोई अतिरिक्त वाक्यविन्यास नहीं है और इस प्रकार चिंता है कि TCO वेब को तोड़ सकता है। दुनिया में इसकी रिलीज के लिए सतर्क है और विचारशील भविष्य के लिए स्थापित करने के लिए ब्राउज़र / इंजन विशिष्ट झंडे की आवश्यकता हो सकती है।

पुनरावर्ती छोरों

टेल कॉल ऑप्टिमाइज़ेशन कॉल स्टैक ओवरफ्लो या बढ़ते फ्रेम स्टैक के ओवरहेड के लिए चिंता के बिना पुनरावर्ती छोरों को सुरक्षित रूप से लागू करना संभव बनाता है।

function indexOf(array, predicate, i = 0) {
    if (0 <= i && i < array.length) {
        if (predicate(array[i])) {  return i; }
        return indexOf(array, predicate, i + 1); // the tail call
    }
}
indexOf([1,2,3,4,5,6,7], x => x === 5); // returns index of 5 which is 4


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow