2013-02-24 10 views
26

Aşağıdaki kod pasajı, işlev ve değişken aynı kapsamda aynı adı paylaştıklarında neler olduğunu görmek için yapılan bir testtir. Chrome'da, değişken tanımının referansta önceliği var görünüyor.Aynı ada sahip işlev ve değişken

  1. Adlandırılmış işlev yürütülebilir mi, yoksa değişken bildirimi tarafından tamamen gizlenmiş mi?
  2. Javascript'teki standart davranış, değişkenlerin aynı ada sahip işlevlere göre önceliği var mı?
iki parça soru için üzgünüm

, ancak iki ayrı soru sormak için savurgan görünüyordu.

Kodu:

JavaScript'inizde
<!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

Ben değişken tanımı yaparak, JavaScript üstüne fonksiyonlarını yükleyici olduğunu tahmin ediyorum fonksiyon tanımı sonra ortaya: Bu, bu konuyla ilgili bazı iyi okuma olduğunu

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

: Olarak örnek kod nedenle okur. Bu nedenle son tanım - değişken - kullanılmış olanıdır. –

cevap

15

, fonksiyon tanımları geçerli kapsamı üstüne askıya alır. http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting

+2

Harika bir yazı. Belirli bir işlevin bir değerin üzerine yazılabilmesi gerçeği, bazı tasarım avantajları olsa da, gerçekten sorunlu görünüyor. Bu soruya geçilirken, değişken ve fonksiyonun iki gizli öğe olarak tutulduğunu varsaydım çünkü hiçbir hata atılmadı. –

+2

Ayrıca yararlı: 1) http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname 2) http://javascriptweblog.wordpress.com/2010/07/06/function -declarations-vs-fonksiyon-ifadeler / –