2013-02-24 70 views
26

निम्न कोड-स्निपेट यह देखने के लिए एक परीक्षण है कि क्या होता है जब कोई फ़ंक्शन और एक चर एक ही दायरे में समान नाम साझा करता है। क्रोम में ऐसा लगता है कि परिवर्तनीय परिभाषा संदर्भ में प्राथमिकता है।एक ही नाम के साथ फंक्शन और वैरिएबल

  1. क्या नामित फ़ंक्शन निष्पादित किया जा सकता है, या यह परिवर्तनीय घोषणा द्वारा पूरी तरह से अस्पष्ट है?
  2. क्या यह जावास्क्रिप्ट में मानक व्यवहार है कि चर समान नाम वाले कार्यों पर प्राथमिकता लेते हैं?

दो भाग प्रश्न के लिए खेद है, लेकिन यह दो अलग-अलग प्रश्न पूछने के लिए अपमानजनक लग रहा था।

कोड:

<!DOCTYPE html> 
    <head> 
     <meta charset="utf-8"> 
     <title></title> 
    </head> 
    <body> 
     <script> 

      var overlapping = function() { return 'this is a var holding an anonymous function' }; 

      function overlapping() 
      { 
       return 'this is a function definition'; 
      } 

      output(overlapping, 'overlapping'); 
      output(overlapping(), 'overlapping()'); 

      function output(expression, description) 
      { 
       document.writeln('<li>' + (description ? ('<i>' + description + '</i>: ') : '') + expression + '</li>'); 
      } 
     </script> 
    </body> 
</html> 
+4

मेरा अनुमान है कि है कि जावास्क्रिप्ट शीर्ष करने के लिए कार्य करता है फहराते हैं, चर परिभाषा करने के बाद समारोह परिभाषा होते हैं:

var overlapping = function() { return 'this is a function definition' }; var overlapping = function() { return 'this is a var holding an anonymous function' }; 

यह इस विषय के बारे में कुछ अच्छी पढ़ा है। इसलिए अंतिम परिभाषा - चर - उपयोग किया जाता है। –

उत्तर

15

जावास्क्रिप्ट में कार्यशील परिभाषाएँ वर्तमान क्षेत्र के शीर्ष करने के फहराया जाता है। आपका उदाहरण कोड इसलिए पढ़ता के रूप में: http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting

+2

ग्रेट आलेख। तथ्य यह है कि आप किसी नाम के साथ नामित फ़ंक्शन को ओवरराइट कर सकते हैं वास्तव में समस्याग्रस्त लगता है, हालांकि कुछ डिज़ाइन लाभ होना चाहिए। इस सवाल में जाकर मैंने माना कि चर और कार्य दो बुद्धिमान वस्तुओं के रूप में आयोजित किया गया था क्योंकि कोई त्रुटि नहीं फेंक दी गई थी। –

+2

भी उपयोगी: 1) http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname 2) http://javascriptweblog.wordpress.com/2010/07/06/function -declarations-बनाम-समारोह-भाव / –