2012-02-13 48 views
8

Bu ilanı gönder Üzgünüz, işlev google-mümkün değil ve ben JavaScript kodumda bulamadık.Javascript'te ne anlama geliyor?

Gerçekte
!function(x){ return x }(true); 
!true 
false 

, bu biraz sıkıştırılmış var:

<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://google.com" data-text="Google says">Tweet</a> 
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script> 

değil işlevi kendisi onlar sonucunu negating ediyoruz

cevap

21

O self-invoking anonymous function kısa elden veya alternatiftir:

(function(){ 
    // code 
})(); 

Yazılı olabilir:

!function(){ 
    // code 
}(); 

Ayrıca + yerine ! kullanabilirsiniz. sadece yaptıysak

: Eğer işlev ifadesi içine işlevi bildirimi döndüğü önce ! eklemem gerekiyor niçin sorunları yaratacak

function(){ 
    // code 
}(); 

, bu.

Quoting docs, section 12.4:

An ExpressionStatement cannot start with the function keyword because that might make it ambiguous with a FunctionDeclaration.

daha iyi anlayabilmek için size kontrol etmelisiniz:

+0

İlginç. Kendiliğinden gelen bir anonim işlev ne zaman yararlı olur? İçerdeki ifadeleri basitçe yürütmekten nasıl farklıdır? – netvope

+1

@netvope: http://stackoverflow.com/questions/592396/what-is-the-purpose-of-a-self-executing-function-in-javascript Bkz – Sarfraz

+0

görüyorum. Teşekkürler. JavaScript – netvope

2

https://twitter.com/about/resources/buttons# den: Burada

Heyecan kullanır nasıl biçimi:

(function(){}()) 

1 daha az karakter gerektirir. İhtiyacın nedeni, bir işlev bildirimini doğrudan arayamazsınız, örn. Bu geçersiz:

function(){}() 

ama başında ! ekleyerek bir fonksiyonu expression haline döner ve o iş yapar.

+0

İlginç teknik ...Bu da 1 karakter :) –

+1

"sonucunu negating", yanıltıcı açıkladım Aynı şey :) OP şaşkındır çünkü "işlevsiz" anlamına geldiğini düşünürler –

+0

daha doğrudur @ –

2

Genellikle JavaScript sözdizimi bir cilvesi etrafında çalışmak için kullanılır. Bu bir işlev bildiriminde (gibi function foo() {}), yerine bir işlev ifadesi olarak okumuş

function() { 
}(); 

: Bu bir sözdizimi hatası verir. Yani ekleyerek! ondan önce veya parantez içinde sarmak, ayrıştırıcıyı bunun bir ifade olduğunu anlamaya zorlar.

+0

Bu bir sözdizimi tuhaflığı değil. Sadece sözdizimi. –