यह कोड एक त्रुटि क्यों फेंक देता है?(फ़ंक्शन eval() {}) फ़ंक्शन बॉडी सख्त मोड में है तो एक वाक्यविन्यास त्रुटि फेंकता है?
// global non-strict code
(function eval() { 'use strict'; });
लाइव डेमो:http://jsfiddle.net/SE3eX/1/
तो, एक नामित समारोह अभिव्यक्ति हम यहाँ है। मैं स्पष्ट रूप से यह इंगित करना चाहता हूं कि यह फ़ंक्शन अभिव्यक्ति गैर-सख्त कोड में दिखाई देती है। जैसा कि आप देख सकते हैं, इसका फ़ंक्शन बॉडी सख्त कोड है।
सख्त मोड नियम यहां हैं: http://ecma-international.org/ecma-262/5.1/#sec-C
प्रासंगिक गोली यह एक (यह सूची में अंतिम एक है) है:
It is a SyntaxError to use within strict mode code the identifiers eval or arguments as the Identifier of a FunctionDeclaration or FunctionExpression or as a formal parameter name (13.1). Attempting to dynamically define such a strict mode function using the Function constructor (15.3.2) will throw a SyntaxError exception.
सूचना कैसे यह नियम केवल लागू होता है अगर समारोह घोषणा/अभिव्यक्ति स्वयं सख्त कोड में दिखाई देती है, जो उपरोक्त मेरे उदाहरण में नहीं है।
लेकिन यह अभी भी एक त्रुटि फेंकता है? क्यूं कर?
बस पूरी तरह से अनुमान लगाते हुए, लेकिन शायद इस तथ्य के साथ कुछ करने के लिए है कि एक * अभिव्यक्ति * में, एक नाम के साथ एक फ़ंक्शन इंस्टेंटेशन अभिव्यक्ति उस नाम को केवल * * के भीतर बांधती है; दूसरे शब्दों में, यह आंतरिक रूप से है जैसे कि 'var' घोषणा के लिए कुछ जादू तरीका था जो फ़ंक्शन के संदर्भ में प्रारंभिक स्थानीय चर बनाने के लिए था। इस प्रकार, ऐसा लगता है कि आप स्थानीय प्रतीक "eval" को स्थानीय रूप से बांधने का प्रयास कर रहे थे। – Pointy
@ पॉइंटी अच्छा संकेत। मुझे उस परिदृश्य में वास्तव में क्या चल रहा है यह स्थापित करने के लिए मानक जांचना होगा ... –
आपको एक ही त्रुटि संदेश मिलता है (सिंटेक्स त्रुटि: फंक्शन का नाम सख्ती मोड में eval या तर्क नहीं हो सकता है) केवल 'function eval() के साथ {'सख्त उपयोग करें'; }; ' – some