दिलचस्प पोस्ट
एक लाख के लिए वैकल्पिक यदि बयान जावास्क्रिप्ट RegExp + शब्द सीमाएं + यूनिकोड वर्ण पायथन कक्षाओं में समानता ("समानता") का समर्थन करने के लिए शानदार तरीके रनटाइम पर XAML लोड हो रहा है? एनजी-दोहराने के समाप्त होने पर फ़ंक्शन कॉल करना ज़्लॉगो टेक्स्ट कैसे काम करता है? मैं कैसे जांचूं अगर कोई स्ट्रिंग में कोई विशिष्ट शब्द होता है? संग्रह में ऑब्जेक्ट द्वारा टी क्यों घिरा है। मैक्स () हस्ताक्षर? तिथि सीमा के आधार पर लॉग फ़ाइल प्रविष्टियां फ़िल्टर करें तैयार करने के लिए कैसे करें FORSegue: एक ऑब्जेक्ट सी संकलन त्रुटि: "वेरिएबल-साइज़ ऑब्जेक्ट को आरम्भ नहीं किया जा सकता" क्या जावा में संकेत मिलता है? अपने मूल आकार के आधार पर फ्लेक्स बढ़ाएं आइटम बढ़ाएं स्तंभ नाम पाने के लिए MySQL क्वेरी? पृष्ठ का उपयोग करते हुए सेलेनियम वेबड्राइवर (सेलेनियम 2) में पृष्ठ ऊपर या नीचे स्क्रॉल करें

क्यों बेबले पुनर्लेखन फ़ंक्शन कॉल को (0, एफएन) (…) पर कॉल करता है?

जैसे एक इनपुट फाइल को देखते हुए

import { a } from 'b'; function x () { a() } 

बैबेल इसे संकलन करेगा

 'use strict'; var _b = require('b'); function x() { (0, _b.a)(); } 

लेकिन जब ढीला मोड में संकलित किया जाता है तो फ़ंक्शन कॉल आउटपुट _b.a(); रूप में _b.a();

मैंने कुछ शोध किया है, जहां उम्मीद में कॉमा ऑपरेटर जोड़ा गया है, इसमें एक टिप्पणी समझा गया है। इसे जोड़ने के लिए जिम्मेदार कोड यहाँ है

वेब के समाधान से एकत्रित समाधान "क्यों बेबले पुनर्लेखन फ़ंक्शन कॉल को (0, एफएन) (…) पर कॉल करता है?"

(0, _b.a)() यह सुनिश्चित करता है कि फ़ंक्शन _b.a को this सेट के साथ वैश्विक ऑब्जेक्ट (या यदि सख्त मोड सक्षम है, undefined करने के लिए) कहा जाता है। यदि आप सीधे _b.a() को कॉल करते थे, तो _b.a को this सेट को _b.a साथ बुलाया जाता है _b.a

(0, _b.a)(); के बराबर है

 0; // Ignore result var tmp = _b.a; tmp(); 

(यह , अल्पविराम ऑपरेटर है, https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator देखें )।

अल्पविराम ऑपरेटर अपने प्रत्येक ऑपरेंड्स का मूल्यांकन करता है (बाएं से दाएं) और पिछले ऑपरेंड के मूल्य को वापस देता है।

 console.log((1, 2)); // Returns 2 in console console.log((a = b = 3, c = 4)); // Returns 4 in console 

तो, एक उदाहरण देखें:

 var a = { foo: function() { console.log(this === window); } }; a.foo(); // Returns 'false' in console (0, a.foo)(); // Returns 'true' in console 

अब, foo पद्धति में, this एक के बराबर a (क्योंकि foo एक से जुड़ा हुआ a ) इसलिए यदि आप a.foo( ) सीधे कॉल a.foo( हैं, तो यह कंसोल में false लॉग करेगा।

लेकिन, अगर आप कॉल (0, a.foo)() अभिव्यक्ति (0, a.foo) अपने प्रत्येक (0, a.foo) (बाएं से दाएं) का मूल्यांकन करेगी और पिछले ऑपरेंड के मूल्य को वापस देगा। दूसरे शब्दों में, (0, a.foo) बराबर है

 function() { console.log(this === window); } 

चूंकि यह फ़ंक्शन अब किसी चीज़ से जुड़ा नहीं है, इसलिए यह वैश्विक ऑब्जेक्ट window । यही कारण है कि जब यह कॉल (0, a.foo)()