2012-01-04 10 views
14

जावास्क्रिप्ट में, आप इस तरह अकेला कोड ब्लॉक हो सकता है, एक if, function या ऐसा ही कुछ पूर्ववर्ती, कोड में मनमाने ढंग से रखा बिना कोड ब्लॉक, कि है,:जावास्क्रिप्ट में अकेला कोड ब्लॉक का उद्देश्य क्या है?

var a = 3, 
b = 4; 
{ 
    a = 50; 
    b = 50; 
} 
alert(a + b); //alerts 100 

मैं कुछ अन्य भाषाओं पता यह है (मुझे लगता है कि सी ++ करता है), और वे इसे स्कोप नियंत्रण के लिए उपयोग करते हैं: अकेले कोड ब्लॉक के अंदर घोषित चर को इसके बाहर एक्सेस नहीं किया जा सकता है। लेकिन चूंकि जावास्क्रिप्ट ब्लॉक ब्लॉक के बजाए कार्यक्षेत्र का कार्य करता है, इसलिए आपको एक ही प्रभाव को प्राप्त करने के लिए एक स्व-निष्पादन कार्य (function(){})() का उपयोग करना होगा।

क्या इस निर्माण के लिए कोई उद्देश्य है? क्या आपने कभी इसका इस्तेमाल किया है? क्या स्पेक इसका जिक्र करता है? क्या यह सिर्फ व्याकरण का एक दुष्प्रभाव है जिसमें कोड ब्लॉक के बारे में कुछ सामान्य नियम हैं?

+1

विशिष्टता: http://ecma262-5.com/ELS5_HTML.htm#Section_12.1 –

+2

मैं अधिकांश समय लगता है कि आप देखते हैं कि यह कोड किसी को जो गलती से लगा कि वे ब्लॉक गुंजाइश मिल रहे थे द्वारा लिखा गया था। कुछ लोग जो जानते हैं कि यह स्कोप नियंत्रण नहीं देता है, वैसे भी वे दृश्य समूह को पसंद करते हैं, लेकिन मुझे लगता है कि _harder_ पढ़ने के लिए है क्योंकि यह गुंजाइश का तात्पर्य है और मुझे आश्चर्य है कि मूल कोडर का क्या अर्थ है। – nnnnnn

+0

@ फ़ेलिक्सक्लिंग किसी को भी समझ सकता है ** ** – c69

उत्तर

9

मैं How are labels used with statements that are not a loop? के लिए मेरा उत्तर googling के बाद पता चला है, अकेला कोड ब्लॉक लेबल से संबंधित हो सकते हैं:

myLabel: 
{ 
    for(x in y) { 
     break myLabel; 
    } 
} 

पाश की न केवल बाहर तोड़ देगा, लेकिन बाहरी कोड ब्लॉक के रूप में अच्छी तरह।

+0

ओह, मुझे यह नहीं पता था, शांत! –

+0

वास्तव में, इसके बारे में सोचने के बाद मुझे कुछ यकीन नहीं है कि यह तकनीकी रूप से सही उत्तर है। कोड ब्लॉक को लेबल करके, हो सकता है कि आप इसे सख्ती से अकेले न मानें: किसी फ़ंक्शन या फ़ंक्शन इत्यादि के बजाय यह किसी लेबल से जुड़ा हुआ है। – Jeff

+0

मैं इसे किसी भी तरह स्वीकार करूंगा। ;) मैंने वास्तव में इस उत्तर से कुछ सीखा, जब दूसरों ने मूल रूप से मुझे बताया कि मुझे पहले से क्या पता था। –

4

केवल कोड पठनीयता, और कुछ भी नहीं।

var c = 'fail'; 
{ 
    var c = 123; 
} 
alert(c); //alerts 123 

(see it live)

+0

दृश्यता से आपका क्या मतलब है? –

+0

@ पीटर ओलसन: मेरा मतलब है ** कोड पठनीयता **। यह कोड पढ़ने के दौरान ही उपयोगी होता है, मुझे ऐसा करने का कोई अन्य कारण नहीं है। – Tadeck

+1

शायद कुछ मामले हैं जहां यह तर्क दिया जा सकता है कि यह अधिक पठनीय है। निजी तौर पर मैं जावास्क्रिप्ट के लिए इस वाक्यविन्यास का कभी भी उपयोग नहीं करता। – sissonb

0

केवल पठनीयता:

वे भी आप को बंद का लाभ देना नहीं है। इसके अलावा, कुछ भी नहीं। ऐसा करें क्योंकि यह भविष्य के सबूत नहीं है। निम्नलिखित खुशी से टूट जाएगा:

"use strict"; 

var a = 3, 
b = 4; 
{ 
    a = 50; 
    b = 50; 
} 
alert(a + b); //alerts 100 

मैं के रूप में यह कार्यक्षमता का तार्किक जुदाई की अनुमति इसे अपने आप का उपयोग करते थे, लेकिन अब इसके बाद के संस्करण की वजह से है।

+0

लॉजिकल अलगाव को दर्शाने के लिए कोड अनुच्छेद का उपयोग करने के लिए यह आसान और अधिक रखरखाव नहीं होगा? –

+1

@ पीटर ओलसन - मैंने इसे अधिकतर बड़ी लिपियों के लिए उपयोग किया है। 'प्रोग्राम कॉन्फ़िगर', 'हैंडल कमांड लाइन विकल्प', 'त्रुटि हैंडलिंग', आदि जैसी चीजें सभी अपने स्वयं के अनुभागों में विभाजित हैं और फिर अज्ञात ब्लॉक से लिपटे हैं। यह इस विचार को "लागू" करता है कि यहां सभी कोड कार्यक्षमता के एक निश्चित समूह से संबंधित हैं। यह ठीक दिखने पर ___very___ साफ और साफ़ दिखता है –

6

अद्यतन (के रूप में इस सवाल का "जावास्क्रिप्ट कोड ब्लॉक" के लिए गूगल पर उच्च दिखाई देता है):

ECMAScript 6 में let कीवर्ड की introduciton साथ

, कोड ब्लॉक भी चर का दायरा सीमित करने के लिए इस्तेमाल किया जा सकता।

{ 
    let x = 20; 
    alert(x) // 20 
} 
alert(x) // undefined 
संबंधित मुद्दे

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