2011-11-29 14 views
5

मैं बेन चेरी के "JavaScript Module Pattern: In-Depth" पढ़ रहा था, और उसके पास कुछ उदाहरण कोड था जिसे मैं समझ में नहीं आया था।इस वैरिएबल को इस var घोषणा में क्यों असाइन करें?

var _private = my._private || {} 

क्या है:

var _private = my._private = my._private || {} 

यह कुछ इस तरह लिखने से अलग हो प्रतीत नहीं होता: पार फ़ाइल निजी राज्य शीर्षक के अंतर्गत, वहाँ है कि निम्न कुछ उदाहरण कोड है यहां हो रहा है और ये दो घोषणाएं अलग कैसे हैं?

+0

हम स्पष्ट रूप से संदर्भ खो रहे हैं लेकिन दूसरा उदाहरण 'my._private' सेट नहीं करता है ...: -? –

+0

@ ÁlvaroG.Vicario आप सही हैं कि दूसरा उदाहरण पहले जैसा नहीं है। वास्तव में – jcolebrand

उत्तर

7
var _private = my._private = my._private || {} 

इस लाइन my._private का उपयोग करता है, तो यह मौजूद है, अन्यथा एक नई वस्तु बनाने और my._private के लिए सेट का मतलब है।

एक से अधिक असाइनमेंट अभिव्यक्ति का उपयोग किसी कथन में किया जा सकता है। असाइनमेंट ऑपरेटर इसका उपयोग करता है (खपत) जो इसके दाईं ओर है और उस मान को वैरिएबल के बाईं ओर अपने आउटपुट के रूप में प्रस्तुत करता है। इसलिए, इस मामले में, स्पष्टता के लिए कोष्ठक के साथ, उपरोक्त var _private = (my._private = (my._private || {}))

के बराबर है यह मामला lazy initialization का एक प्रकार है। एक कम संक्षिप्त संस्करण होगा:

if (!my._private) { 
    my._private = {}; 
} 
var _private = my._private; 

इस मामले में, ऐसा लगता है कि आलसी आरंभीकरण आलस्य से कहीं भी प्रारंभ के लिए और अधिक किया जाता है। दूसरे शब्दों में, सभी कार्यों में मौजूदा पंक्ति को दूर किए बिना my._private को सुरक्षित रूप से बनाने या उपयोग करने के लिए इस पंक्ति को शामिल किया जा सकता है।

+0

। और मुझे संपादन में हराया, क्योंकि मुझे पता था कि आप क्या कहना चाहते थे ;-) – jcolebrand

+0

@jcolebrand मुझे प्रोग्रामर से अपने संपादन पर प्रतिलिपि बनाना पड़ा क्योंकि जब मैं संपादन कर रहा था तब इसे माइग्रेट किया गया था :) – Nicole

+0

ओह बेकार है: \ – jcolebrand

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