2017-06-29 8 views
8

जावास्क्रिप्ट अक्षरों (तार, संख्या) के साथ क्या होता है जो एक चर के लिए बाध्य नहीं हैं (उर्फ असाइन किए गए हैं)?अनबाउंड जावास्क्रिप्ट अक्षरों का क्या होता है?

// A comment 
"Practically, also a comment" 
var assigned = "something" 
53 
423.0022 
NaN 
"does it impact performance" 
// or is it treated just like a comment? 

ब्राउज़र उन्हें अनदेखा करने के लिए प्रकट होता है, लेकिन मैं spec

+1

संदर्भ के लिए: [अभिव्यक्ति वक्तव्य] (http://www.ecma-international.org/ecma-262/6।0/# सेक-एक्सप्रेशन-स्टेटमेंट) –

+0

मैं ES3.1 का पालन नहीं करता हूं, लेकिन सख्त मोड जोड़ा जाना चाहिए (यह एक अभिव्यक्ति कथन के अंदर एक स्ट्रिंग अक्षर के माध्यम से पता चला है) – Hydro

+0

यह संभावना है कि असली दुनिया जेएस इंजन अनुकूलित करें दूर "अप्रयुक्त" अभिव्यक्तियों का कोई दुष्प्रभाव नहीं है। – joews

उत्तर

8

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

एक प्रयोग सख्त निर्देशक एक है:

"use strict"; 

यह एक JavaScript directive

का अर्थ EcmaScript specification से है:

लेकिन फिर भी कम से कम उन में से एक एक प्रभाव पड़ता है अभिव्यक्ति स्टेटमेंट एक निर्देशक प्रस्तावना में जिसका स्ट्रिंग लिटरल ईआई है सटीक कोड इकाई अनुक्रम "use strict" या 'use strict'

भी ध्यान रखें कि अन्य स्ट्रिंग शाब्दिक हो सकता है एक विशेष अर्थ जब निर्देश प्रस्तावना में प्रयोग किया जाता है:

क्रियान्वयन ExpressionStatement प्रस्तुतियों जो एक प्रयोग सख्त निर्देशक नहीं हैं के लिए कार्यान्वयन विशिष्ट अर्थ को परिभाषित कर सकते और जो एक निर्देश प्रस्ताव में होता है।

+0

यह एक निर्देशक शाब्दिक बयान है, स्ट्रिंग शाब्दिक अभिव्यक्ति नहीं - इसे https://astexplorer.net/ – joews

+0

में दर्ज करने का प्रयास करें और ध्यान दें कि सख्त मोड ES3.1 के बाद जोड़ा गया है: http://jaoo.dk/dl/jaoo -आर्फस -2008/स्लाइड्स // प्रतापक्ष्मण_ईसीएमएस्क्रिप्ट 31.pdf (ES4 के बाद) – Hydro

+1

@joews, मुझे लगता है कि यह शब्द पसंद का मामला है। एक्मास्क्रिप्ट स्पेक निर्देशक प्रस्ताव में एक अभिव्यक्ति कथन के एक स्ट्रिंग अक्षर के रूप में इसके बारे में बोलता है। – trincot

6

में एक विशिष्ट नियम यह सिर्फ एक expression statement कि मूल्यांकन करता है भी नहीं मिला - बिना किसी दुष्प्रभाव - कि त्याग दिया जाता है एक मूल्य के लिए।

यदि आप इसे eval या एक आरईपीएल में आजमाते हैं तो आप इसे कथन का परिणाम देख सकते हैं।

0

के बाद से मूल्य संग्रहीत नहीं किया जा रहा है (अर्थात कोई जगह अपने शाब्दिक पकड़ के लिए आवंटित किया जा रहा है), यह ब्राउज़र द्वारा कम या ज्यादा ध्यान नहीं दिया जा रहा है, और यह भी कचरा कलेक्टर के लिए कोई भूमि के ऊपर। कम से कम आपके कोड का कार्य नहीं बदलता है। आपकी जावास्क्रिप्ट फ़ाइल निश्चित रूप से एक छोटी सी बड़ी होगी क्योंकि इसमें अधिक (बेकार) टेक्स्ट होता है।

0

ऐसा लगता है कि वे कुछ भी नहीं किए जा रहे चर के रूप में व्यवहार करते हैं। यह उनका व्यवहार करता है जैसे कि वे वैसे भी मौजूद नहीं हैं। यह प्रयास करें:

function myFunction() { 
 
    "comment" 
 
    //Or comment 
 
    alert("hello"); 
 
}
<html> 
 

 
<body> 
 
    <button onclick="myFunction()">Call Javascript</button> 
 
</body> 
 

 
</html>

आप देख सकते हैं, कुछ नहीं होता जब रिक्त स्ट्रिंग है। यह एक दिलचस्प सवाल है, इसलिए मुझे किसी अन्य परिणाम सुनने में बहुत दिलचस्पी होगी।

1

मान स्मृति में संग्रहीत किए जाते हैं, जब तक वे कचरा कलेक्टर द्वारा साफ नहीं हो जाते हैं, क्योंकि स्मृति में उस स्थान को कुछ भी इंगित नहीं कर रहा है।

+0

मुझे नहीं लगता कि कचरा कलेक्टर इसमें शामिल है। क्या आपके पास इसका संदर्भ है? मुझे लगता है कि अभिव्यक्ति का मूल्यांकन करने के लिए उपयोग की जाने वाली स्मृति तुरंत मुक्त हो जाती है, अगर सभी इंजन ने इसके लिए बाइट कोड बनाया है। – trincot

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

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