2016-04-05 3 views
6

मुझे एक दिलचस्प मामला मिला जहां "सख्त उपयोग" जावास्क्रिप्ट में अपेक्षित काम नहीं कर रहा है। निम्नलिखित कार्यवसा तीर के लिए काम नहीं कर रहे जावास्क्रिप्ट में सख्त उपयोग करें?

"use strict"; 

var y =() => { 
    console.log(this); 
} 

var x = function() { 
    console.log(this); 
} 

x(); // undefined due to use strict 
y(); // window object 

मुझे लगता है कि वसा तीर संदर्भ भी अपरिभाषित द्वारा ओवरराइट किया जाना चाहिए, या मेरे धारणा गलत है?

+1

चूंकि आप इसे वैश्विक दायरे में निष्पादित कर रहे हैं (जहां यह 'विंडो 'ऑब्जेक्ट है), और तीर कार्यों में यह' यह 'है, मुझे यह नहीं पता कि इसके बारे में क्या अप्रत्याशित है? – Bergi

उत्तर

7

MDN arrow functions का कहना है:

सख्त मोड के साथ संबंध

यह देखते हुए कि this शाब्दिक है, this के संबंध में सख्त मोड नियम सिर्फ ध्यान नहीं दिया जाता।

var f =() => {'use strict'; return this}; 
f() === window; // or the global object 

शाब्दिक this के नियमों सख्त मोड this नियमों से प्राथमिकता दी जाती।

हम a function's [[ThisMode]] slot के लिए संभावित मान के मैदान-अंग्रेजी विवरण का परीक्षण करके ES2015 विनिर्देश में आसानी से देख सकते हैं, जो हो सकता है lexical, strict, या global:

को परिभाषित करता है कि कैसे this संदर्भ के भीतर व्याख्या कर रहे हैं औपचारिक पैरामीटर और समारोह के कोड बॉडी। lexical का अर्थ है कि this एक व्याख्यात्मक रूप से संलग्न कार्य के this मान को दर्शाता है। strict का अर्थ है कि this मान फ़ंक्शन के आमंत्रण द्वारा प्रदान किए गए अनुसार बिल्कुल उपयोग किया जाता है। global का अर्थ है कि undefined का मान वैश्विक वस्तु के संदर्भ के रूप में व्याख्या किया गया है।

दूसरे शब्दों में, एक फ़ंक्शन का this व्यवहार या तो सख्त, गैर-सख्त, या शब्दावली हो सकता है। यदि कोई फ़ंक्शन [[ThisMode]] लेक्सिकल है (जैसा कि यह एक तीर फ़ंक्शन के लिए है), यह this -setting व्यवहार को निर्धारित करने के उद्देश्य से फ़ंक्शन की सख्त/गैर-सख्त स्थिति अप्रासंगिक प्रस्तुत करता है।

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