दिलचस्प पोस्ट
क्या कुछ टेक्स्ट वाले तत्वों के लिए कोई सीएसएस चयनकर्ता है? नेविगेशनदृश्य सही पर काउंटर के साथ मेनू आइटम प्रक्रिया आईडी Xcode संलग्न करने में विफल थ्रेड पूल के साथ एमडीसी का उपयोग कैसे करें? आप अपने नाम को वापस करने के लिए रेंज कैसे प्राप्त कर सकते हैं? जावास्क्रिप्ट में स्ट्रिंग मान की गणना, eval का उपयोग नहीं कर रहा है एन्जोर 2 में एनजी के लिए जेसन ऑब्जेक्ट को पुनरावृत्ति करना कैसे iphone के wobbling आइकन प्रभाव बनाने के लिए? स्प्रिंग प्रोग्राम के साथ नौकरी का निर्धारण (गतिशील रूप से तयशुदा सेट के साथ) स्थिर तरीकों और उदाहरण तरीकों के बीच का अंतर std :: vector बनाम std :: सरणी में सी ++ एसडी कार्ड से ईमेल भेजने की कोशिश कर रहा है I डेटा को स्थानांतरित करना यूएसबी जावास्क्रिप्ट में सरणी से सबसे छोटा मूल्य प्राप्त करें? रेल सर्वर पर रुबी विकल्प

क्यों बेबले पुनर्लेखन फ़ंक्शन कॉल को (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)()