कौन सी तंत्र कॉलिंग फ़ंक्शन के नाम से अपने कॉलर से arguments
को संदर्भित करने के लिए जावास्क्रिप्ट फ़ंक्शन को अनुमति देता है और यह अभी भी भाषा में क्यों है?जावास्क्रिप्ट में कॉलर में तर्कों का संदर्भ देने के लिए क्यों संभव है?
मैं पूंछ कॉल अनुकूलन (बल्कि उसके अभाव या) वी 8 में देख रहा था और इस पोस्ट में आए (https://code.google.com/p/v8/issues/detail?id=457)
एरिक Corry के उदाहरण पहले तो नीचे
function foo(x) {
return bar(x + 1);
}
function bar(x) {
return foo.arguments[0];
}
foo(1)
दिया जाता है मुझे लगा एक फ़ंक्शन का आह्वान करने से arguments
फ़ील्ड किसी प्रकार के अजीब वैश्विक दुष्प्रभाव के रूप में सेट होता है, लेकिन यह केवल कॉल की अवधि के लिए रहता है।
function foo(x) {
return bar(x+1);
}
function bar(x) {
return foo.arguments[0];
}
console.log(foo(1)); // prints '1'
console.log(foo.arguments); // prints 'null'
भाषा में यह व्यवहार क्यों है? क्या यह पीछे की संगतता के अलावा कुछ भी उपयोगी है?
संपादित करें:
मैं arguments
का उपयोग कर मौजूदा समारोह शरीर में बहस के छद्म सरणी का उल्लेख करने के बारे में पूछ नहीं कर रहा हूँ, उदा
function variadic() {
for (var i = 0; i < arguments.length; i++) {
console.log("%s-th item is %s", i, JSON.stringify(arguments[i]));
}
}
variadic(1, 2, 3, 4, 5, []);
मैं somefunction.arguments
का उपयोग कर एक फोन करने वाले की arguments
का उल्लेख करने के बारे में पूछ रहा हूँ।
जावास्क्रिप्ट में किसी फ़ंक्शन को किसी भी तर्क के साथ बुलाया जा सकता है, इससे कोई फर्क नहीं पड़ता कि उनमें से कितने सूचीबद्ध हैं। जावास्क्रिप्ट फ़ंक्शंस में एक अंतर्निहित ऑब्जेक्ट होता है जिसे तर्क वस्तु कहा जाता है जो इस क्षमता का समर्थन करता है। – Gary
मेरी गलती, मेरे उदाहरण में एक टाइपो था। यह 'foo.arguments' कहा जाना चाहिए था। –
ध्यान दें कि यह व्यवहार सख्त मोड में चला गया है, और फ़ंक्शन के 'को पढ़ने का प्रयास कर रहा है।तर्क 'एक त्रुटि फेंक देगा https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode ("सुरक्षित" के तहत) – Eevee