2011-01-31 11 views
49

जावास्क्रिप्ट में, कोई फ़ंक्शन के लिए निर्धारित औपचारिक पैरामीटर की संख्या कैसे निर्धारित कर सकता है?एक कार्य की धैर्य प्राप्त करें

नोट, यह arguments पैरामीटर नहीं है जब फ़ंक्शन कहा जाता है, लेकिन नामित तर्कों की संख्या के साथ फ़ंक्शन को परिभाषित किया गया था।

function zero() { 
    // Should return 0 
} 

function one(x) { 
    // Should return 1 
} 

function two(x, y) { 
    // Should return 2 
} 
+1

फ़ंक्शन की धैर्य क्या है() {वापसी तर्क [0]; }? – AtnNn

+5

@atnnn 0, ज़ाहिर है। – Phrogz

उत्तर

54
> zero.length 
0 
> one.length 
1 
> two.length 
2 

Source

एक समारोह इस तरह अपने स्वयं के arity (लम्बाई) निर्धारित कर सकते हैं:

// For IE, and ES5 strict mode (named function) 
function foo(x, y, z) { 
    return foo.length; // Will return 3 
} 

// Otherwise 
function bar(x, y) { 
    return arguments.callee.length; // Will return 2 
} 
+0

मेरा इरादा मेरे अपने प्रश्न का उत्तर देना था क्योंकि यह स्टैक ओवरफ़्लो पर नहीं था लेकिन आपने मुझे इसे हराया! मैं अपनी खुद की धैर्य निर्धारित करने के लिए एक फ़ंक्शन के लिए तकनीक के साथ अपना उत्तर अपडेट करूंगा। – JasonSmith

+0

आपका मतलब 'arguments.callee.length' है? – Phrogz

+0

हां मेरा मतलब था। – JasonSmith

11

एक समारोह के arity अपने .length संपत्ति में संग्रहित है।

function zero() { 
    return arguments.callee.length; 
} 

function one(x) { 
    return arguments.callee.length; 
} 

function two(x, y) { 
    return arguments.callee.length; 
} 

> console.log("zero="+zero() + " one="+one() + " two="+two()) 
zero=0 one=1 two=2 
4

के रूप में अन्य उत्तर में कवर किया जाता है, length संपत्ति आपको लगता है कि बताता है। तो zero.length 0 हो जाएगा, one.length 1 हो जाएगा, और two.length हो जाएगा 2.

ES2015 के रूप में, हम दो झुर्रियों है:

  • कार्य पैरामीटर के अंत में एक "आराम" पैरामीटर हो सकता है सूची जो अप (arguments छद्म सरणी के विपरीत) एक सच्चे सरणी में उस स्थिति या बाद में किसी भी समय दिया तर्क बटोरता
  • समारोह मापदंडों मूलभूत मूल्यों

"रेस हो सकता है टी "पैरामीटर नहीं गिना जाता है जब समारोह के arity का निर्धारण:

function stillOne(a, ...rest) { } 
 
console.log(stillOne.length); // 1

इसी तरह, एक डिफ़ॉल्ट तर्क के साथ एक पैरामीटर arity में शामिल नहीं होते, और वास्तव में किसी भी अन्य से बचाता है यह करने के लिए जोड़ने से भले ही वे स्पष्ट चूक नहीं है यह निम्नलिखित (वे undefined के एक मूक डिफ़ॉल्ट है ग्रहण कर रहे हैं):

function oneAgain(a, b = 42) { } 
 
console.log(oneAgain.length); // 1 
 

 
function oneYetAgain(a, b = 42, c) { } 
 
console.log(oneYetAgain.length); // 1

+0

धन्यवाद! यह एक महान अद्यतन है। मैं 'आराम' के लिए सोचता हूं, जबकि यह वास्तविक धैर्य को छुपाता है, 'लम्बाई' संपत्ति अभी भी उपयोगी है। लेकिन डिफ़ॉल्ट पैरामीटर के मामले में, क्या आप किसी भी कामकाज को जानते हैं, या यहां तक ​​कि यह पता लगाने के लिए कि एक डिफ़ॉल्ट पैरामीटर का उपयोग किया जा रहा है? – JasonSmith

+0

@ जेसनस्मिथ: कुछ भी नहीं जो अपघटन पर निर्भर नहीं है (उदा।, 'फंक्शन # टूस्ट्रिंग')। –

0

फ़ंक्शन एरीटी फ़ंक्शन वाले पैरामीटर की संख्या है। इसे लंबाई संपत्ति को कॉल करके प्राप्त किया जा सकता है।

उदाहरण:

function add(num1,num2){} 
console.log(add.length); // --> 2 

function add(num1,num2,num3){} 
console.log(add.length); // --> 3 

नोट: एक समारोह कॉल में पारित समारोह के arity को प्रभावित नहीं करता पैरामीटर की संख्या।

0

धैर्य संपत्ति फ़ंक्शन द्वारा अपेक्षित तर्कों की संख्या को वापस करने के लिए उपयोग की जाती है, हालांकि, यह अब मौजूद नहीं है और इसे function.prototype.length गुण द्वारा प्रतिस्थापित किया गया है।

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

  • कोई संबंधित समस्या नहीं^_^