2012-02-13 27 views
8

इसे पोस्ट करने के लिए खेद है लेकिन! फ़ंक्शन google-able नहीं है और मुझे इसे अपने जावास्क्रिप्ट कोड में नहीं मिला।क्या करता है! जावास्क्रिप्ट में कार्य का मतलब है?

<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> 

से https://twitter.com/about/resources/buttons#

उत्तर

21

यह कम हाथ या self-invoking anonymous function का विकल्प है:

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

लिखा जा सकता है:

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

तुम भी + बजाय ! उपयोग कर सकते हैं।

तो आप बस किया था:

function(){ 
    // code 
}(); 

कि समस्या पैदा होगा, कि आप क्यों इससे पहले कि यह जो में समारोह अभिव्यक्तिसमारोह घोषणा बदल जाता है ! जोड़ने की आवश्यकता है।

Quoting docs, section 12.4:

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

बेहतर अवधारणा को समझने के लिए, आप की जांच करनी चाहिए:

+0

दिलचस्प। एक स्व-चालान रहित अज्ञात कार्य कब उपयोगी होता है? बस बयान को निष्पादित करने से अलग कैसे है? – netvope

+1

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

+0

देखें I देखें। धन्यवाद। अच्छा होगा अगर जावास्क्रिप्ट केवल ब्रेसिज़ (जैसे सी ++ में) के साथ स्कोपिंग का समर्थन करता है – netvope

2

वे परिणाम को नकारने कर रहे हैं, नहीं समारोह में ही:

!function(x){ return x }(true); 
!true 
false 

हकीकत में, यह एक से थोड़ा संकुचित है

यहाँ कैसे ट्विटर इसे इस्तेमाल करता है का रूप:

(function(){}()) 

क्योंकि इसे 1 कम वर्ण की आवश्यकता है। इसकी आवश्यकता यह है कि आप सीधे फ़ंक्शन घोषणा को कॉल नहीं कर सकते हैं, उदा। इस अमान्य है:

function(){}() 

लेकिन शुरुआत में ! जोड़ने एक समारोह expression में बदल जाता है और यह काम करता है।

+0

दिलचस्प तकनीक ... –

+1

"नतीजे को नकारना" भ्रामक है, @ ट्वििसोल का जवाब अधिक सटीक है –

+0

@ imeimeidas - मुझे लगता है कि यह उत्पन्न होता है यह उत्पन्न कोड है जो स्व-चालान समारोह पैटर्न की तलाश में है क्योंकि यह 1 चरित्र को बचाता है :) –

2

यह आमतौर पर जावास्क्रिप्ट वाक्य रचना में एक मोड़ के आसपास काम करने के लिए प्रयोग किया जाता है।

function() { 
}(); 

यह एक समारोह घोषणा (function foo() {}) की तरह है, बजाय एक समारोह अभिव्यक्ति के रूप में पढ़ा है: यह एक सिंटैक्स त्रुटि देता है। तो जोड़ना! इससे पहले, या इसे कोष्ठक में लपेटकर, पार्सर को यह समझने के लिए मजबूर करता है कि यह एक अभिव्यक्ति है।

+0

यह वाक्यविन्यास का एक quirk नहीं है। यह सिर्फ वाक्यविन्यास है। –

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