दिलचस्प पोस्ट
कैसे उप गतिविधियों को मारने और स्टैक के शीर्ष पर गतिविधि लाने के लिए HTML में प्रदर्शित करने के लिए ऊपर / नीचे त्रिकोण (बिना स्टेम के तीर) के लिए कौन-से पात्रों का उपयोग किया जा सकता है? बड़ी संख्या में पंक्तियों के साथ JTable जनसंख्या सरलतम बनाम PHPunit यूनिक्स में रिक्त वर्णों को पहचानना और निकालना पायथन में अपने मॉड्यूल आयात नहीं कर सकते बूट समय पर एंड्रॉइड -स्टार्टिंग सेवा क्रॉन का विंडोज संस्करण क्या है? रूबी में बेस 64 एन्कोडेड स्ट्रिंग में अजीब \ n तालिका शीर्षक शीर्ष पर तय रहने के लिए जब उपयोगकर्ता इसे jQuery के दृश्य से बाहर स्क्रॉल करता है एसटीएल वेक्टर और धागा-सुरक्षा संदर्भ: MySQL एक्सटेंशन का उपयोग करके एक आदर्श कोड नमूना क्या है? टंकिनर कैनवास में गेंदें बढ़ाना जब कोई आईफोन को हिलाता है तो मुझे कैसे पता लगा सकता है? क्या SparkSQL का समर्थन करता है subquery?

जावास्क्रिप्ट फ़ंक्शन प्रमुख बैंग! वाक्य – विन्यास

मैं अब कुछ पुस्तकालयों पर इस वाक्यविन्यास को देख रहा हूं और मैं सोच रहा हूं कि लाभ क्या है (ध्यान दें मैं क्लोजर के बारे में अच्छी तरह जानता हूं और कोड क्या कर रहा है, मैं सिर्फ सिंटैक्टीकल अंतर के बारे में चिंतित हूं)

!function(){ // do stuff }(); 

अधिक सामान्य के लिए एक विकल्प के रूप में

 (function(){ // do stuff })(); 

स्वयं के लिए अनाम कार्यों का आह्वान करने के लिए

मैं कुछ चीजें सोच रहा हूँ सबसे पहले, क्या वास्तव में काम करने के लिए शीर्ष उदाहरण की अनुमति है? इस कथन को वाक्यात्मक रूप से सही बनाने के लिए आवश्यक बैंग क्यों है? मुझे यह भी बताया गया है कि + काम करता है, और मुझे यकीन है कि कुछ अन्य लोगों की जगह !

दूसरा, लाभ क्या है? मैं यह बता सकता हूं कि यह एक एकल चरित्र को बचाता है, लेकिन मैं कल्पना नहीं कर सकता कि कई अपनाने वाले लोगों को आकर्षित करने के लिए इतने बड़े लाभ हैं क्या कुछ अन्य लाभ है जो मैं लापता हूं?

मैं देख सकता हूँ कि एकमात्र अंतर फर्क स्वयं के लिए मूल्य का होगा, लेकिन इन दोनों उदाहरणों में, हमें फ़ंक्शन के रिटर्न वैल्यू के बारे में वास्तव में परवाह नहीं है क्योंकि इसका उपयोग केवल एक क्लॉज बनाने के लिए किया जाता है। तो कोई मुझे बता सकता है कि कोई पहली सिंटैक्स का उपयोग क्यों कर सकता है?

Solutions Collecting From Web of "जावास्क्रिप्ट फ़ंक्शन प्रमुख बैंग! वाक्य – विन्यास"

आदर्श रूप से आपको यह सब करने में सक्षम होना चाहिए:

 function(){ // do stuff }(); 

इसका अर्थ है गुमनाम समारोह घोषित करना और उसे निष्पादित करना। लेकिन यह जेएस व्याकरण की विशेषताओं के कारण काम नहीं करेगा।

तो इसे प्राप्त करने का सबसे छोटा रूप कुछ अभिव्यक्ति जैसे कि यूनारी एक्सपे्रेशन (और इसलिए कॉलएक्सेशन) का उपयोग करना है:

 !function(){ // do stuff }(); 

या मस्ती के लिए:

 -function(){ // do stuff }(); 

या:

 +function(){ // do stuff }(); 

या और भी:

 ~function(){ // do stuff return 0; }( ); 

जावास्क्रिप्ट में, function साथ शुरुआत की जाने वाली एक पंक्ति एक फ़ंक्शन कथन होने की उम्मीद है और उसे दिखना चाहिए

 function doSomething() { } 

जैसे स्वयं आत्मसात करने वाला समारोह

 function(){ // do stuff }(); 

उस रूप में फिट नहीं होता है (और पहले खोलने वाले कोष्ठ में एक वाक्य रचना त्रुटि का कारण होगा क्योंकि कोई फ़ंक्शन नाम नहीं है), इसलिए ब्रैकेट्स का उपयोग किसी अनाम फ़ंक्शन अभिव्यक्ति को चित्रित करने के लिए किया जाता है।

 (function(){ // do stuff })(); 

लेकिन जो कुछ भी अभिव्यक्ति (एक फ़ंक्शन कथन के विरोध के रूप में) बनाता है, ऐसा इसलिए होगा ! । यह दुभाषिया को बता रहा है कि यह फ़ंक्शन कथन नहीं है इसके अलावा, ऑपरेटर की प्राथमिकता यह बताती है कि फ़ंक्शन को अस्वीकार करने से पहले लागू किया जाता है।

मुझे इस सम्मेलन के बारे में पता नहीं था, लेकिन अगर यह सामान्य हो जाता है तो यह पठनीयता में योगदान दे सकता है। मेरा क्या मतलब यह है कि किसी को पढ़ने वाले किसी भी व्यक्ति के कोड के बड़े हिस्से के शीर्ष पर एक आत्म-अभिविन्यास की अपेक्षा की जाती है, जिस तरह से हम पहले से ही उम्मीद कर रहे हैं, जब हम देखते हैं कि हम (function करते हैं (function सिवाय इसके कि हम उन कष्टप्रद कोष्ठकों को खो देंगे । मुझे उम्मीद है कि इसका कारण, गति या चरित्र की गिनती में किसी भी बचत के विपरीत

उन चीजों के अलावा जो पहले ही कह चुके थे, साथ वाक्यविन्यास! उपयोगी है यदि आप जावास्क्रिप्ट बिना अर्धविराम लिखते हैं:

 var i = 1 !function(){ console.log('ham') }() i = 2 (function(){ console.log('cheese') })() 

पहला उदाहरण अपेक्षाकृत 'हैम' का उत्पादन करता है, लेकिन दूसरा एक त्रुटि फेंकता है क्योंकि i = 2 कथन निम्नलिखित कोष्ठक के कारण समाप्त नहीं किया गया है।

साथ ही जुड़ी जावास्क्रिप्ट फाइलों में आपको चिंता करने की ज़रूरत नहीं है अगर पूर्ववर्ती कोड में अर्धविराम लग गया है। तो आम के लिए कोई ज़रूरत नहीं है; (फ़ंक्शन () {}) (); यह सुनिश्चित करने के लिए कि आपका स्वयं टूट नहीं जाएगा

मुझे पता है कि मेरा उत्तर देर से है लेकिन मुझे लगता है कि इसका उल्लेख अभी तक नहीं किया गया है 🙂

एक बात के लिए, jsPerf दिखाता है कि का उपयोग कर ! (UnaryExpression's) आमतौर पर तेज़ होते हैं कभी-कभी वे समान होने के लिए बाहर आते हैं, लेकिन जब वे नहीं होते हैं, तो मैंने अभी तक दूसरों के ऊपर गैर-टकराया हुआ विजय नहीं देखा है: http://jsperf.com/bang-function

यह नवीनतम उबंटू पर सबसे पुराना (प्रति कह .. ..) क्रोम, संस्करण 8 के साथ परीक्षण किया गया था। तो परिणाम बिल्कुल भिन्न हो सकते हैं।

संपादित करें: कैसे delete चाहते हैं जैसे कुछ पागल?

 delete function() { alert("Hi!"); }(); 

या void ?

 void function() { alert("Hi!"); }(); 

जैसा कि आप यहां देख सकते हैं, जावास्क्रिप्ट में स्व-चालित विधियों का सर्वोत्तम तरीका उपयोग कर रहा है:

 (function(){}()); -> 76,827,475 ops/sec !function(){}(); -> 69,699,155 ops/sec (function(){})(); -> 69,564,370 ops/sec 

तो, नकार के साथ "!" और +, -, ~, हटाने, शून्य, जैसे बहुत सारे अन्य यूनिअरी ऑपरेटरों को संक्षेप में बताया गया है:

 !function(){ alert("Hi!"); }(); 

या

 void function(){ alert("Hi!"); }(); 

या

 delete function(){ alert("Hi!"); }(); 

और मज़ा के लिए द्विआधारी ऑपरेटरों के साथ कुछ और मामले 🙂

 1 > function() { alert("Hi!"); }(); 

या

 1 * function() { alert("Hi!"); }(); 

या

 1 >>> function() { alert("Hi!"); }(); 

या और भी

 1 == function() { alert("Hi!"); }(); 

किसी और लोगों के लिए टर्नरी छोड़ना 🙂