जावास्क्रिप्ट में ब्लॉक-स्कोपेड चर घोषणाओं के लिए 'लेट' नाम क्यों चुना गया?


306

मैं समझता हूं varकि वह नाम क्यों लेता है - यह परिवर्तनशील है, const- यह एक स्थिर है, लेकिन नाम के पीछे का अर्थ क्या है let, जो वर्तमान ब्लॉक में जाता है? होने दो?


7
1962 में आविष्कृत BASIC , का उपयोग किया गया LET। पहले के भाषा उदाहरण हो सकते हैं।
डेविड आर ट्रिब्लेड

5
बेसिक का आविष्कार 1964 में हुआ था , 1962 में नहीं। यहाँ भी देखें । के उपयोग LETके मैनुअल के पहले मसौदे के पृष्ठ 7 पर वर्णन किया गया है, मई 1964, यहाँ पीडीएफ
जोसेफ क्विनसी

अधिक विशेष रूप constसे एक स्थिर, या अपरिवर्तनीय (केवल पढ़ने के लिए) वस्तु संदर्भ है जहां वस्तु अभी भी परिवर्तनशील है। उदाहरण के लिए। घोषणा / असाइनमेंट के बाद const foo = ['bar'], फिर foo.push('bat')भी कानूनी होगा, लेकिन foo = ['bar', 'bat']ऐसा नहीं है। लेकिन यह बहुत ज्यादा टाइपिंग है।
user982671

जवाबों:


372

आज्ञा देना एक गणितीय कथन है जिसे योजना और मूल जैसी प्रारंभिक प्रोग्रामिंग भाषाओं द्वारा अपनाया गया था। चर को निम्न स्तर की इकाइयाँ माना जाता है जो उच्च स्तर की अमूर्तता के लिए उपयुक्त नहीं है, इस प्रकार कई भाषा डिजाइनरों की इच्छा क्लोजर, एफ #, स्काला जैसी समान लेकिन अधिक शक्तिशाली अवधारणाओं को पेश करने की है, जहां letइसका मतलब मूल्य हो सकता है, या एक चर जिसे सौंपा जा सकता है। लेकिन बदले नहीं , जो बदले में संकलक को अधिक प्रोग्रामिंग त्रुटियों को पकड़ने और कोड को बेहतर तरीके से अनुकूलित करने देता है।

जावास्क्रिप्ट varशुरुआत से ही रहा है, इसलिए उन्हें सिर्फ एक और कीवर्ड की जरूरत थी, और बस दर्जनों अन्य भाषाओं से उधार लिया गया था जो letपहले से ही एक पारंपरिक कीवर्ड के रूप varमें संभव के रूप में उपयोग करते हैं, हालांकि जावास्क्रिप्ट letब्लॉक बजाय स्थानीय चर बनाता है।


94
और आधिकारिक मोज़िला दस्तावेज़ पृष्ठ इस प्रश्न के लिए इस पृष्ठ का हवाला देता है developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
Sarath Chandra

9
यह भी अच्छा है len('var') === len('let'), जिसका अर्थ है कि आपकी घोषणाएं आपके संपादक में अच्छी तरह से लाइन अप करती हैं। मुझे यह सुझाव देने के लिए अभी तक कुछ भी नहीं मिला है कि यह जानबूझकर किया गया था, लेकिन यह या तो एक हो सकता है) नेत्रहीन मनभावन और अधिक पठनीय, या ख) यदि आप दोनों को मिलाते हैं तो डिबग करने के लिए बहुत कष्टप्रद है (जो कि एक बुरे विचार की तरह लगता है, लेकिन '' यह किया देखा है)।
ब्रिचिन

13
दूसरे शब्दों में, letपारंपरिक रूप से एक स्थिरांक का वर्णन करने के लिए उपयोग किया गया है, let C = the speed of lightइसलिए जावास्क्रिप्ट में गैरमानक स्कूपिंग के साथ एक चर का वर्णन करने के लिए उपयोग करने का निर्णय लिया गया और उसी समय स्थिरांक के लिए एक और कीवर्ड पेश किया।
फिजियारोन

1
मैं असहमत हूं जो letकरीब है var। इसके अलावा स्काला उपयोग नहीं करता है letइसलिए मैं यह नहीं देखता कि यह प्रासंगिक कैसे है।
अलुआन हदद

3
@ फिजियारोन: नॉनवेज स्कोपिंग कैसे? क्या पूरे कार्य-की-परवाह किए बिना-आप-के-ब्लॉक-घोषित-इट-इन किस तरह की शुरुआत के साथ विषम है?
सामब

78

मुझे लगता है कि यह गणितीय परंपरा का अनुसरण करता है। गणित में, यह अक्सर कहा जाता है कि "x को मनमाने ढंग से वास्तविक संख्या होने दें" या उस तरह।


मैं इस उत्तर को अधिक पसंद करता हूं क्योंकि यह संक्षिप्त और काफी भरोसेमंद है जैसा कि हम सभी बीजगणित के माध्यम से गए थे, तो संभवतः स्पष्टीकरण के साथ पालन किया जाना चाहिए जैसे कि अन्य क्या इंगित कर रहे हैं।
दुधवे

69

एक्सबुक की प्रतिक्रिया में जोड़ना , कीवर्ड के गणितीय उपयोग को जावास्क्रिप्ट / ईएस 6 में उपयोग किए जाने पर स्कोपिंग के निहितार्थ को अच्छी तरह से समझाया letजाता है। विशेष रूप से, बस के रूप में निम्नलिखित ES6 कोड के महत्व में पता नहीं है toPrint जब यह मूल्य प्रिंट 'Hello World',

let toPrint = 'Hello World.';
{
    let toPrint = 'Goodbye World.';
}
console.log(toPrint); // Prints 'Hello World'

चलो के रूप में औपचारिक रूप गणित (विशेष रूप से सबूत के लेखन) में इस्तेमाल इंगित करता है कि एक चर की वर्तमान उदाहरण केवल कि तार्किक विचार के दायरे के लिए मौजूद है। निम्नलिखित उदाहरण में, x तुरंत नए विचार में प्रवेश करने पर एक नई पहचान प्राप्त करता है (आमतौर पर ये मुख्य विचार को साबित करने के लिए आवश्यक अवधारणाएं हैं) और उप-प्रमाण के समापन पर तुरंत पुराने x पर वापस लौट जाता है। बेशक, कोडिंग के रूप में, यह कुछ हद तक भ्रामक माना जाता है और इसलिए आमतौर पर दूसरे चर के लिए एक अलग नाम चुनने से बचा जाता है।

X को ऐसा होने दो ...

  प्रमाण सामान

 नया आइडिया {x कुछ और होने दो ... कुछ साबित करो} न्यू आइडिया को सम्‍मिलित करें

 पुराने एक्स के साथ मुख्य विचार साबित करें


19
मुझे लगता है कि यह वास्तव में उपयोगी है। स्वीकृत उत्तर लगभग भ्रामक है, क्योंकि यह मूल्य को बदलने में सक्षम नहीं होने की बात करता है, जो कि बिल्कुल भी नहीं letहै। letसभी गुंजाइश के बारे में है।
14

बस एक विचार: letमुझे इस तरह के कोड लेखक के दिमाग में कुछ इस तरह से सोचने लगता है, "ठीक है, बस इस पल के लिए let foo = bar, लेकिन फिर यह अपने मूल मूल्य पर वापस जा सकता है या होना बंद हो सकता है। यह बड़े करीने से सचित्र है। में ब्लॉक स्कोप और Redeclaring चर के लिए उदाहरण इस W3Schools प्रस्तुति की let। फिर, किसी प्रकार की वैज्ञानिक जवाब में लाने का नाटक नहीं, लेकिन जब मैं का उपयोग करना चाहते याद करने के लिए यह अधिक साझा करने को स्मरक डिवाइस के रूप में let
एलेन

मुझे लगता है कि यहाँ वैचारिक स्पष्टता के लिए यह थोड़ा अधिक सटीक है। आपका उदाहरण ES6 कोड "ब्रेसिज़ में असाइनमेंट को अनदेखा नहीं करता है"। यह निर्देशन के अनुसार कार्य करता है, एक नए वैरिएबल पर toPrintजो केवल ब्लॉक के भीतर मौजूद होता है , और फिर ब्लॉक समाप्त होने पर उस चर को कर्तव्यपूर्वक फेंक देता है। और बाहर निकलने पर, हम बाहरी दायरे में वापस आ गए हैं, जहां आंतरिक toPrintअब मौजूद नहीं है, इसलिए बाहरीconsole.log(toPrint) को संदर्भित करता है । ऐसा नहीं है कि किसी भी चीज को नजरअंदाज कर दिया गया हो, यह सिर्फ इतना है कि चर का दायरा उनके दायरे से परिभाषित है। toPrintlet
FeRD

1
@FeRD, उत्कृष्ट बिंदु। मैंने "अनदेखा" शब्द के उपयोग को हटाने के लिए ऊपर की ओर एक संपादन किया है क्योंकि यह बिंदु को बाधित करता है।
इवान व्हाइट

36

यह वही करता है जो varगुंजाइश अंतर के साथ करता है। अब यह नाम नहीं ले सकता है varक्योंकि यह पहले से ही लिया गया है।

इसलिए ऐसा लगता है कि इसने अगला सबसे अच्छा नाम ले लिया है जिसका एक दिलचस्प अंग्रेजी भाषा निर्माण है।

let myPet = 'dog';

अंग्रेजी में यह कहता है कि "मेरे पालतू कुत्ते को रहने दो"


5
जबकि लेग की उत्पत्ति भाषाई और गणितीय हो सकती है, लेकिन घर-घर का संदर्भ निस्संदेह बुनियादी प्रोग्रामिंग भाषा के सभी संस्करणों में LET स्टेटमेंट है, एक कि ES6 के कई लेखकों ने सीखना शुरू कर दिया होगा यदि वे खत्म हो गए हैं 40 यो।
wide_eyed_pupil

5
@wide_eyed_pupil जस्ट FYI: 40 से अधिक के रूप में (हालांकि ES6 का लेखक नहीं), जो मूल रूप से बड़े हुए, उन समुदायों में से कोई भी नहीं, जो सामान्य व्यवहार में इस्तेमाल किए गए LET के साथ शामिल थे; हमने अभी वेरिएबल सौंपा है, जैसा कि पायथन अब करता है (उदाहरण के लिए A$="HELLO WORLD") इसमें शामिल व्याख्याताओं में रॉकवेल एआईएम 65 बेसिक, अटारी बेसिक, सीपीएंडएस पर एमबीएएसआईसी 5, एप्लेसॉफ्ट बेसिक और यहां तक ​​कि बास्कॉम, एमएस / एम पर एमएस बेसिक बॉयलर भी शामिल हैं। वैक्स बेसिक के पास एलईटी था, लेकिन इसकी आवश्यकता नहीं थी, जैसा कि मुझे याद है। मेमोरी तब वापस टाइट हो गई थी, और प्रति कथन प्रोग्राम टेक्स्ट के 3 या 4 अतिरिक्त पात्रों ने विशेष रूप से "बड़े" कार्यक्रमों में अंतर किया।
पीटर हुल

@PeterHull दिलचस्प है, मैंने अपना पहला कोडिंग एक डिजिटल सीपीयू से जुड़ी पेंसिल चिह्नित कार्डों पर किया, फिर पुराने आदमी की रिसर्च लैब में मेनफ्रेम और स्कूल में डिजिटल पीडीपी 8 पर काम किया। कभी नहीं देखा कि लोग वास्तव में बयान का उपयोग किए बिना एलईटी का उपयोग करते हैं, न कि किताबों में जो मैंने पढ़ा है। माइंड यू, मुझे फोरट्रान और पास्कल में कोड करने के लिए प्रोत्साहित किया गया था जैसे ही मुझे कोई अच्छा, बुनियादी रूप में उतना ही बुरा मिला, जितना कि मेरे द्वारा उपयोग किए जाने वाले संस्करणों में GOSUB (यानी पुन: प्रयोज्य कार्य) भी नहीं था।
wide_eyed_pupil

आप एक लेट वेरिएबल को दोबारा नहीं भेज सकते।
CONvid19

10

सबसे अधिक संभावना यह है कि यह सबसे मुहावरेदार विकल्प था। न केवल बोलना आसान है, बल्कि समझने के लिए सहज है। कुछ बहस कर सकते हैं, इससे भी ज्यादा var

लेकिन मुझे लगता है कि इसमें थोड़ा और इतिहास है।

से विकिपीडिया :

डाना स्कॉट की एलसीएफ भाषा आधुनिक कार्यात्मक भाषाओं में लैम्ब्डा कैलकुलस के विकास में एक चरण थी। इस भाषा ने लेट एक्सप्रेशन पेश किया, जो उस समय से सबसे अधिक कार्यात्मक भाषाओं में प्रकट हुई है।

राज्य-पूर्ण अनिवार्य भाषाएं जैसे कि ALGOL और पास्कल अनिवार्य रूप से, ब्लॉक संरचनाओं में कार्यों के प्रतिबंधित दायरे को लागू करने के लिए, एक अभिव्यक्ति को लागू करते हैं।

मुझे विश्वास है कि यह letजावास्क्रिप्ट के लिए भी एक प्रेरणा थी ।


यह उत्तर लैम्ब्डा कैलकुलस 'लेट एक्सप्रेशन' को संदर्भित करता है, जो शायद ओपी ने पूछा नहीं है। और यह LET1964 के बाद से BASIC की तुलना में बाद में प्रतीत होता है ।
जोसेफ क्विन्से

यह संपूर्ण लेख 2014 में विकिपीडिया के उपयोगकर्ता Thepigdog द्वारा लिखे गए मूल रूप से एकल-लिखित रूप से एक है। मैं विवेकपूर्ण होगा और बस इतना कहूंगा कि वे सभी बहुत ही संकीर्ण दृष्टिकोण से लिखे गए हैं, इसलिए (पूरी तरह से अप्रतिबंधित) दावे को उद्धृत किया जाना चाहिए। यह कहते हुए कि स्कॉट के पेपर ने " लैम्बडा कैलकुलस की अभिव्यक्ति" को उसी तरह पेश letकिया, जिस तरह ईएस 6 ने जावास्क्रिप्ट को पेश किया था। पूरी तरह से असत्य नहीं है, जहां तक ​​यह जाता है, लेकिन बिना किसी वास्तविक महत्व के। (और किसी भी तरह से इस संभावना से LET
इनकार नहीं

1

एक और अधिक तत्काल ब्लॉक स्तर सीमित दायरे का उपयोग करते हैं जबकि var फ़ंक्शन स्कोप या वैश्विक स्कोप है।

ऐसा लगता है कि इसे सबसे अधिक संभावना के लिए चुना गया था क्योंकि यह कई अन्य भाषाओं में पाया जाता है, जैसे कि चर, जैसे कि BASIC, और कई अन्य।


1

मुझे लगता है कि यहां स्कीम के लिए जावास्क्रिप्ट की ऋणीता स्पष्ट है। स्कीम में न केवल लेट, बल्कि लेट *, लेट * -वेल्यूज, लेट-सिंटैक्स और लेट-वैल्यू हैं। (देखें, द स्कीम प्रोग्रामिंग लैंग्वेज, 4th एड।)।

((यह पसंद इस धारणा को और पुख्ता करती है कि जावास्क्रिप्ट लिस्पी है, लेकिन - इससे पहले कि हम चले जाएं - जियोसोनिक नहीं।))।


1

इसका अर्थ कुछ ऐसा भी हो सकता है जैसे "लेक्सिकल एनवायरनमेंट टाइप या टाईड" .. यह मुझे परेशान करता है कि यह बस "ऐसा ही रहने दे "। और चलो लाम्बा पथरी में समझदारी नहीं होगी।


मैं इस तरह के जवाब की तलाश में था, मुझे भी संदेह है कि यह "चलो" का सामान्य अंग्रेजी अर्थ है
मेनोहारा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.