दिलचस्प पोस्ट
पायथन में एक इटरेटर में तत्वों की संख्या प्राप्त करना Exec () का उपयोग करते समय कमांड प्रॉम्प्ट विंडो छुपाएं लिनक्स में, मैं एक शेल स्क्रिप्ट कैसे चलाऊँ, जब एक फ़ाइल या निर्देशिका में बदलाव होता है जावास्क्रिप्ट के भीतर रेज़र का उपयोग करना मैं एक प्लेटफॉर्म पर निर्भर नया लाइन कैरेक्टर कैसे प्राप्त करूं? जावा निष्पादक: मैं कार्य प्राथमिकता कैसे निर्धारित कर सकता हूं? जावास्क्रिप्ट: रिकर्सिव अनाम फ़ंक्शन? थ्रेड कैसे रोकें? getElementsByClassName () पुराने इंटरनेट एक्सप्लोरर्स जैसे आईई 6, आईई 7, आईई 8 में काम नहीं करता है फेसबुक लॉग इन से उपयोगकर्ता का ईमेल आईडी प्राप्त करने की अनुमति सेट करें JQuery अजाक्स अनुरोध की प्रगति प्राप्त करने का सबसे साफ तरीका क्या है? सीएसएस होवर बनाम जावास्क्रिप्ट माउसओवर QMake के उप-डिज़ाइन टेम्पलेट का उपयोग कैसे करें? सी कंपाइलर संरेखण पैडिंग को खत्म करने के लिए संरचना सदस्यों को पुनर्व्यवस्थित क्यों नहीं कर सकता? क्रोम में सेलेनियम वेबड्रायवर परीक्षण के मामलों को चलाने के लिए कैसे?

सख्त का उपयोग करते समय एक अनाम समारोह में "यह" क्यों अनिर्धारित है?

सफ़ेद मोड में जावास्क्रिप्ट का उपयोग करते समय यह अज्ञात समारोह में क्यों अनिर्धारित है? मैं समझता हूं कि यह क्यों समझ सकता है, लेकिन मुझे कोई ठोस जवाब नहीं मिला।

उदाहरण:

(function () { "use strict"; this.foo = "bar"; // *this* is undefined, why? }()); 

एक बेला में टेस्ट करें: http://jsfiddle.net/Pyr5g/1/ लॉगगर (फायरबग) को चेक करें

वेब के समाधान से एकत्रित समाधान "सख्त का उपयोग करते समय एक अनाम समारोह में "यह" क्यों अनिर्धारित है?"

ऐसा इसलिए है, जब ईसीएमएक्रिप्ट 262 संस्करण 5 तक, एक बड़ा भ्रम था, यदि लोग जहां constructor pattern का उपयोग करते थे, तो new कीवर्ड का इस्तेमाल करना भूल गया था। यदि आप ईएस 3 में कंस्ट्रक्टर फ़ंक्शन बुलाते समय new उपयोग करना भूल गए हैं, तो this वैश्विक ऑब्जेक्ट (ब्राउज़र में window ) का संदर्भ देता है और आप वैश्विक ऑब्जेक्ट को वेरिएबल्स के साथ लहराते हैं।

यह भयानक व्यवहार था और ईसीएमए के लोगों ने तय किया कि this सिर्फ undefined करने के लिए सेट this गया।

उदाहरण:

 function myConstructor() { this.a = 'foo'; this.b = 'bar'; } myInstance = new myConstructor(); // all cool, all fine. a and b were created in a new local object myBadInstance = myConstructor(); // oh my gosh, we just created a, and b on the window object 

आखिरी पंक्ति ES5 सख्त में एक त्रुटि फेंकता है

 "TypeError: this is undefined" 

(जो एक बेहतर व्यवहार है)

"मुक्केबाजी" नामक एक तंत्र है जो बुलाए गए फ़ंक्शन के संदर्भ में प्रवेश करने से पहले this वस्तु को लपेटता है या बदलता है। आपके मामले में, इस का मान undefined होना चाहिए क्योंकि आप फ़ंक्शन को ऑब्जेक्ट की एक विधि के रूप में नहीं बुला रहे हैं। यदि गैर सख्त मोड, इस मामले में, यह window ऑब्जेक्ट द्वारा प्रतिस्थापित किया गया है। strict मोड में यह हमेशा अपरिवर्तित होता है, यही कारण है कि यह यहां undefined है।

आप अधिक जानकारी पा सकते हैं
https://developer.mozilla.org/en/JavaScript/Strict_mode

इस स्टैक अतिप्रवाह के उत्तर के अनुसार, आप इसके अंत में अनाम .call(this) इसका इस्तेमाल कर सकते हैं, बस कॉलिंग करके। .call(this)

 (function () { "use strict"; this.foo = "bar"; }).call(this);