अनाम जावास्क्रिप्ट फ़ंक्शन f => f क्या वास्तव में करता है?


101

मैं एक तीसरे पक्ष के पुस्तकालय का उपयोग कर रहा हूं जिसमें एक फ़ंक्शन है जो तर्कों के रूप में कार्य करता है। मैं यह तय करने के लिए कुछ सशर्त जांच कर रहा हूं कि क्या किसी विशेष फ़ंक्शन को एक पैरामीटर के रूप में जोड़ना है या नहीं और कुछ मामलों में मैं फ़ंक्शन प्रदान नहीं करना चाहता हूं। उस स्थिति में अशक्त प्रदान करना एक त्रुटि फेंकता है।

मुझे यह कोड मिला जो काम करता है, लेकिन मुझे पूरी तरह से समझ नहीं आया कि क्या हो रहा है।

compose(__DEV__ ? devTools() : f => f)

क्या एक खाली अनाम फ़ंक्शन के f => fबराबर है () => {}?


3
यह की एक वस्तु शाब्दिक रिटर्न f, के अनुसार MDN
एली Sadoff

4
खाली नहीं अनाम, यह पहचान है।
डेविन ट्रेटन

17
एफडब्ल्यूआईडब्ल्यू, आप अक्सर बाबेल में इस तरह के निर्माणों को देख सकते हैं कि ईसीएमएस्क्रिप्ट के पुराने संस्करणों में समकक्ष क्या हैं।
जेम्स थोरपे


इसका जवाब stackoverflow.com/questions/24900875/… सीधे इस सवाल का जवाब नहीं देता है। मुझे पता था कि f => f एक गुमनाम फंक्शन था जिसे मैं ठीक से समझ नहीं पाया था कि यह क्या कर रहा है। मुझे लगता है कि यह सवाल एक विशिष्ट मामला है और फेलिक्स किंग द्वारा पहचान कार्यों के बारे में दी गई जानकारी इस सवाल के लिए अद्वितीय है।
SomethingOn

जवाबों:


114

f => f के समान है function(f){ return f; }

इतना करीब, लेकिन काफी नहीं जिसकी आपको उम्मीद थी।

* - जैसा कि टिप्पणियों में बताया गया है, सूक्ष्म अंतर हैं, लेकिन आपके प्रश्न के लिए, मुझे नहीं लगता कि वे विशेष रूप से प्रासंगिक हैं। वे अन्य स्थितियों में बहुत प्रासंगिक हैं।


2
मैं कम से कम दो अंतरों के बारे में सोच सकता हूं f => fऔर function(f) { return f; }:)
बेंजामिन ग्रुएनबाम

6
@BenjaminGruenbaum शांत, आगे बढ़ें - यहां तक ​​कि इस उत्तर को अपडेट करें यदि आप इसे प्रासंगिक मानते हैं।
जामेइक

4
मुझे नहीं लगता कि यह बहुत प्रासंगिक है, बस एक पेडेंट: new (f => f)फेंकता है, इसका एक अलग toStringऔर कुछ कारण है कि मैं (f => f).argumentsक्रोम में काफी ग्रो फेंकता हूं लेकिन एफएफ या एज नहीं।
बेंजामिन Gruenbaum

5
@BenjaminGruenbaum की हैंडलिंग thisभी अलग है। (हालांकि यह thisफंक्शन अवलोकनीय नहीं हो सकता है यदि फंक्शन बॉडी में नहीं दिखता है ... मुझे यकीन नहीं है)
ग्रेगरी निस्बेट

184

f => fहै पहचान समारोह । यह केवल उस तर्क को वापस करता है जो पारित किया गया था।

यह फ़ंक्शन अक्सर परिवर्तन प्रक्रियाओं के लिए एक डिफ़ॉल्ट मान के रूप में उपयोग किया जाता है, क्योंकि यह कोई भी परिवर्तन नहीं करता है।

क्या एक खाली अनाम फ़ंक्शन के f => fबराबर है () => {}?

नहीं। खाली फ़ंक्शन कुछ भी वापस नहीं करता है। पहचान फ़ंक्शन तर्क में पारित कर देता है।


43
A + नाम, स्पष्टीकरण और उपयोग का मामला प्रदान करने और वास्तविक प्रश्न का उत्तर देने के लिए।
धन्यवाद

19

यदि आप जानना चाहते हैं कि क्या f => fमतलब है, बाईं ओर पैरामीटर है और दाईं ओर रिटर्न मान है। तो उदाहरण के लिए, के f => f*2बराबर है:

function(f) { 
  return f * 2; 
}

जो कोड आप रिटर्न का वर्णन करते हैं वह इनपुट के रूप में इसे दिया जाता है।

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions


9

दूसरों ने पहले से ही उल्लेख किया है कि क्या f => fकरता है, इसलिए मैं इसमें गहराई तक नहीं जा रहा हूं। मैं बस बाकी फ़ंक्शन को समझाने जा रहा हूं, क्योंकि दोनों के बीच थोड़ा अंतर है f => fऔर__DEV__ ? devTools() : f => f

टर्नरी ऑपरेटर जाँचता है कि __DEV__क्या सत्य मूल्य है, और यदि ऐसा है, तो यह फ़ंक्शन लौटाता है devTools()। अन्यथा, यह पहचान फ़ंक्शन वापस f => fकरता है जो कुछ भी नहीं करता है। अलग तरीके से रखें: यह कोड कुछ विकास मोड कार्यों को सक्षम करता है। शेष कोड के बिना, यह बताना मुश्किल है कि यह मोड क्या जोड़ता है, लेकिन संभवतः, यह कुछ अतिरिक्त लॉगिंग जानकारी और कम ओफ़्फ़्यूशन को सक्षम करेगा।


__DEV__ ? devTools() : f => fके लिए कुछ भी निर्दिष्ट नहीं करता है f। क्या आपने कोड उदाहरण से कुछ छोड़ा है?
फेलिक्स क्लिंग

2
यह फ़ंक्शन को वापस नहीं करेगा, यह फ़ंक्शन का परिणाम
लौटाएगा

1
आपका अवतार मुझे परेशान करता है और मेरा दिन बिगाड़ देता है। मुझे ऐसा लगता है कि 90 का दशक और मेरे मॉडेम ने कनेक्शन खो दिया है। फिर भी, +1 वैसे भी, एक अच्छे उत्तर के लिए।
कोनराड विल्टर्स्टन

@KonradViltersten आप मेरे अवतार पर टिप्पणी करने वाले पहले व्यक्ति नहीं हैं। आप पहले वाले हैं जो इसे पसंद नहीं करते हैं। अधिकांश लोगों ने उदासीन कारक और उम्मीदों के छोटे तोड़फोड़ की सराहना की, जो इसे आमंत्रित करता है।
नजल्ल

1
मुझे उम्मीद है कि आपको विडंबना मिली, दोस्त। यह एक मजाक के रूप में था, ज़ाहिर है। जाहिर है, मैं इसे पसंद करता हूं और मुझे यह ताज़ा लगता है।
कोनराड विल्टर्स्टन

9

कभी भी इसी तरह की दुविधा के साथ, आप जवाब पाने के लिए बेबेल का उपयोग कर सकते हैं ।

यह इस तरह लौटा:

"use strict";

(function (f) {
  return f;
});

BTW, => आपने उपयोग किया ES6 सुविधा जिसे एरो एक्सप्रेशन कहा जाता है । ब्याज की दूसरी अभिव्यक्ति

() => {};  // es6

में परिवर्तित होगा:

(function () {});

चूंकि एरो फंक्शन एक्सप्रेशन हमेशा अनाम होते हैं, तो यह समझ में आता है कि क्या आप फंक्शन में नाम जोड़ते हैं:

let empty = () => {}; // es6

में परिवर्तित हो जाएगा

var empty = function empty() {}; 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.