익명 JavaScript 함수 f => f는 정확히 무엇을합니까?


101

함수를 인수로 사용하는 함수가있는 타사 라이브러리를 사용하고 있습니다. 특정 함수를 매개 변수로 추가할지 여부를 결정하기 위해 조건부 검사를 수행하고 있으며 경우에 따라 함수를 제공하고 싶지 않습니다. 이 경우 null을 제공하면 오류가 발생합니다.

작동하는 코드를 찾았지만 무슨 일이 일어나고 있는지 완전히 이해하지 못했습니다.

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

인가 f => f에 해당 () => {}빈 익명 함수?


3
그것은의 객체 리터럴을 반환 f에 따라, MDN
엘리 Sadoff에게

4
익명이 아니라 신원입니다.
Davin Tryon

17
FWIW, 이전 버전의 ECMAscript에 해당하는 항목이 무엇인지 확인하기 위해 이와 같은 구성을 babel삽입 할 수 있습니다 .
James Thorpe


에 그 답 stackoverflow.com/questions/24900875/...는 바로이 질문에 대답하지 않습니다. 나는 f => f가 익명의 함수라는 것을 알고 있었지만 정확히 무엇을하는지 이해하지 못했습니다. 저는이 질문이 특정한 경우라고 생각하며 Felix King이 제공하는 신원 기능에 대한 정보는이 질문에 고유합니다.
SomethingOn

답변:


114

f => f 비슷하다 function(f){ return f; }

너무 가깝지만 예상했던 것과는 다릅니다.

*-의견에서 지적했듯이 미묘한 차이가 있지만 귀하의 질문을 위해 특별히 관련성 이 없다고 생각 합니다. 그들은 다른 상황에서 매우 관련이 있습니다.


2
나는 사이에 적어도 두 가지 차이점 생각할 수 f => ffunction(f) { return f; }:)
벤자민 Gruenbaum

6
@BenjaminGruenbaum 멋지다, 계속하십시오-관련성이 있다고 생각되면이 답변을 업데이트하십시오.
Jamiec

4
나는 그것이 매우 관련성이 있다고 생각하지 않고 단지 pedant : new (f => f)던지기, 그것은 다르며 toString어떤 이유로 나는 (f => f).arguments크롬에서 던질 수는 없지만 FF 또는 Edge는 아닙니다.
Benjamin Gruenbaum dec

5
@BenjaminGruenbaum 취급 this도 다릅니다. (경우 차이가 관찰되지 않을 수도 있지만 this함수 본문에 나타나지 않습니다 ... 잘 모르겠어요)
그레고리 니스벳

184

f => f는 IS 식별 기능 . 단순히 전달 된 인수를 반환합니다.

이 함수는 변환을 수행하지 않기 때문에 변환 프로세스의 기본값으로 자주 사용됩니다.

인가 f => f에 해당 () => {}빈 익명 함수?

아니요. 빈 함수는 아무것도 반환하지 않습니다. identity 함수는 전달 된 인수를 반환합니다.


43
A + : 이름, 설명 및 사용 사례를 제공하고 실제 질문에 답합니다.
감사합니다


9

다른 사람들은 이미 무엇을하는지 언급 f => f했으므로 더 깊이 들어 가지 않겠습니다. 차이의 비트가 있기 때문에 그냥 함수의 나머지 부분을 설명 할게 f => f하고__DEV__ ? devTools() : f => f

삼항 연산자는 __DEV__값이 진실 인지 확인 하고 만약 그렇다면 function을 반환합니다 devTools(). 그렇지 않으면 f => f아무것도하지 않는 identity 함수 를 반환합니다 . 다르게 말하면이 코드는 일부 개발 모드 기능을 활성화합니다. 나머지 코드가 없으면이 모드가 무엇을 추가하는지 알기가 어렵지만 아마도 약간의 추가 로깅 정보와 덜 난독 화를 가능하게 할 것입니다.


__DEV__ ? devTools() : f => f에 아무것도 할당하지 않습니다 f. 코드 예제에서 빠진 것이 있습니까?
Felix Kling

2
함수를 반환하지 않고 함수의 결과를 반환합니다
Stephan Bijzitter dec.

1
당신의 아바타는 나를 짜증나게하고 내 하루를 방해합니다. 90 년대와 모뎀 연결이 끊어진 것 같습니다. 그래도 좋은 답변을 원하시면 +1하세요.
Konrad Viltersten

@KonradViltersten 당신은 내 아바타에 대한 첫 번째 댓글이 아닙니다. 당신은 그것을 좋아하지 않는 첫 번째 사람입니다. 대부분의 사람들은 향수를 불러 일으키는 요소와 그것이 불러 일으키는 기대의 작은 전복을 높이 평가했습니다.
Nzall

1
당신이 아이러니를 얻길 바랍니다. 물론 농담이었다. 분명히 나는 ​​그것을 좋아하고 상쾌하게 독창적입니다.
Konrad Viltersten

9

비슷한 딜레마가 있으면 언제든지 Babel 을 사용 하여 답을 얻을 수 있습니다 .

다음과 같이 반환되었습니다.

"use strict";

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

BTW, => 사용하신 ES6 기능은 화살표 표현 입니다. 관심의 다른 표현

() => {};  // es6

다음으로 변환됩니다.

(function () {});

화살표 함수 표현식은 항상 익명 이므로 함수에 이름을 추가하면 의미가 있습니다.

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

로 변환 할 것이다

var empty = function empty() {}; 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.