ES6에 얇은 화살표 기능이없는 이유는 무엇입니까?


16

ES6는 팻 화살표 기능 ( =>)을 추가 했는데, 정상 기능과는 크게 두 가지 차이점이 있습니다.

  • 더 짧은 구문 (단일 표현식 본문을 사용하는 경우 암시 적 반환 포함)
  • this주변 범위에서 상속

이것들은 매우 유용한 기능이지만 그 가치와 응용 프로그램에서 완전히 분리 된 것처럼 보입니다. 때로는 때로는 하나 또는 다른 것을 원하거나 둘 다 또는 둘 다 원하지 않습니다. 내가 짧은 구문 기능을 사용하려면, 내가 그 이상한 것 같다 도 사용 this-modifying 동작을. 그 반대. 이 두 가지 기능이 언어에 단일 추가로 구현 된 이유를 모르겠습니다.

암시 적 반환 및 간결성을 위해 짧은 구문 함수를 사용하려면 (전체 function (..) { return ...}가 약간 읽기 어려운 일부 컨텍스트에서 ) this호출 컨텍스트를 참조하기 위해 함수에서 사용하려면 어떻게해야합니까? 이를 수행 할 방법이 없습니다.

CoffeeScript에는 스타일 기능 이 모두 ->있으며 =>ES6은 =>스타일을 빌려 왔습니다 . 내 질문은 왜 ES6도 ->스타일을 빌리지 않았 습니까?


지방 화살표 기능은 바인딩 할 수없는 것과 같은 다른 차이점이 arguments있습니다.
DeadMG

때때로 원하는 범위가 주변 범위이면 항상 this전체 함수 선언으로 클로저에 바인딩 할 수 있습니다 . 이것은 당신이 걱정하는 부분이 아닐 수도 있습니다.
Ben

답변:


25

화살표 기능 추가 제안을 참조하십시오 : http://wiki.ecmascript.org/doku.php?id=harmony:arrow_function_syntax 1

그것이 말하는 것 :

그러나 우리는 CoffeeScript 's->를 원하지 않습니다. 두 개의 화살표가 혼란스럽고 역동적입니다.

https://esdiscuss.org/topic/arrow-function-syntax-simplified- > 구문을 가진 제안서의 이전 버전에 대한 토론도 볼 수 있습니다.

다음과 같이 나타납니다.

  1. 미묘하게 다른 의미를 가진 두 개의 화살표 구문을 사용하면 복잡성과 혼란이 증가합니다.
  2. 동적으로이 function () 바인딩은 ->거의 유용하지 않은 것으로 보이며, 총입니다.
  3. 동적 으로이 바인딩이 실제로 필요한 경우 단축키 구문이 도움이되지 않은 function ()을 계속 사용할 수 있습니다.

1
+1. 특히 ES6은 ES4에 포함되도록 계획된 이러한 기능을 도입하기위한 두 번째 시도이지만, 주요 이해 당사자들이 너무 복잡하고 역 호환성을 깨뜨릴 수 있다고 생각하면 사양이 폐기되었습니다. 이번에는위원회를 위해 모든 것을 가능한 한 단순하게 유지하는 것이 중요한 목표 였을 것입니다.
Jules

1
귀하의 답변에 감사드립니다. 그러나 나는 그것을 덮고 있다고 생각하지 않습니다. 적은 것이 더 단순하지는 않습니다. 나는 서로 다른이 바인딩 로직을 얻기 위해 (단일 문자를 전환하는 것과 비교하여) 두 개의 매우 다른 함수 구문 사이를 전환하는 것이 더 복잡하다고 주장합니다. "다양한 의미론을 가진 여러 유형의 함수"를 갖는 것은 끔찍한 아이디어가 아닙니다. 우리가 실제로 가지고있는 것입니다. 그리고 이전 버전과의 호환성이 우리가 말하는 것과 관련이 있는지 알지 못합니다. 고전 함수 구문에 대한 지원을 제거해야한다고 제안하지는 않습니다. 이것이 의미하는
바입니다

2
@callum, 컨센서스 (적어도이 결정을 내리는 사람들 중)는 function()이러한 구속력이 실수였으며 언어에 대한 경고 라고 생각합니다. 가능하다면 시맨틱 function()을 갖도록 변경 =>되었지만 이전 버전과의 호환성을 손상시킬 수 없기 때문에 불가능합니다.
Winston Ewert

2
@WinstonEwert, 잠깐만 요, 당신은 결정을 내리는 사람들이 주변 범위에서 function()상속 받도록 바꿀 수 있다면 선호했을 것이라고 말하고 있습니까? 이 경우 어디에서나 전역 객체를 참조 하지 않습니까? 이상하게 들린다. 어디서 들었어? this=>this
callum

3
이것은 대답이 맞을지 모르지만 언어 디자인이 좋지 않은 것 같습니다. 굵은 화살표가 필요한 언어가있는 경우 얇은 화살표도 사용할 수 있습니다. 전자는 모든 사람이 객체의 관점에서 생각하기 시작하지만 후자는 기능 설계의 자바 스크립트 역사와 지연된 컨텍스트를 인정합니다.
Core
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.