2017-09-25 1 views
1

how 화살표 함수는 this이 아니기 때문에 일반 함수에 비해 기본적인 기능이 부족합니다. 컨텍스트가 없기 때문에 생성자로 사용할 수 없습니다.JavaScript : 화살표 기능은 일류 함수입니까?

이 점을 염두에두고 화살표 기능을 1 급 기능으로 간주합니까?

편집 : 화살표 함수가 첫 번째 클래스 함수로 간주되는 경우 화살표 함수의 속성을 사용하여 계속 호출 할 수 있습니까?

답변

1

화살표 기능이 없다는 것을 보면 일반 기능에 비해 꽤 기본적인 기능이 부족합니다. 컨텍스트가 없기 때문에 생성자로 사용할 수 없습니다.

함수의 실행에만 관련되며 유형에는 관련이 없습니다. A this 값은 함수 객체 자체가 아니라 실행 측면입니다.

화살표 기능이 1 급 개체로 간주됩니까?

예, 다른 개체와 마찬가지로 데이터 개체이며, 호출 할 수있는 실행 가능한 코드가 포함되어 있다는 점이 다릅니다. 호출과 관련하여 여러 종류의 함수의 기능과 제한 사항은 함수가 일급 객체인지 아닌지에 영향을주지 않습니다.

const fn = foo => foo + 42 
 
const fn2 = fn 
 

 
console.log(fn == fn2) // true 
 

 
console.log(fn(42)) 
 
console.log(fn2(42)) 
 

 
fn.foo = "bar" 
 
console.log(fn2.foo) // "bar"


편집 : 화살표 기능은 최고 수준의 기능을 고려하는 경우, 당신은 여전히 ​​하나를 호출 할 수 있도록 화살표 기능의 속성은 무엇인가?

기존 기능의 속성과 동일합니다. 그것들은 Function.prototype을 상속받은 모든 객체입니다. 그들의 주된 차이점은 호출에서의 것인데, 다시 한 번 그들이 최상위 클래스의 객체/함수인지에 대한 질문을 변경하지 않습니다. 그들은 구문 적으로 어떤 장소에서든지 다른 어떤 대상이 사용될 수 있습니다.

+0

@Andrew : 이것은 상당히 다른 질문이며, 하나의 함수 유형을 다른 함수 유형과 비교하기 전에 실제로 질문해야합니다. 기본적으로 다른 객체와 마찬가지로 데이터로 구문 적으로 사용할 수있는 객체입니다. 인터프리터/컴파일러는 변수, 함수 매개 변수 또는 값을 필요로하는 다른 구문의 값으로 만들려고하면 구문 오류를 throw하지 않습니다. 배열과 마찬가지로 특별한 종류의 객체 값도 함수와 같습니다. – llama

+0

Hmm .. "다른 구문을 사용할 수있는 곳에서는 구문 론적으로 사용할 수 있습니다."라는 의미는 무엇입니까? 왜냐하면이 구문을 어떻게 해석했는지에 따라 생성자로 사용할 수 없기 때문에 사실이 아닙니다. 최소한 제대로 사용하지 마십시오. 화살표 함수의 'this'는 윈도우/전역 객체 (또는 그 위의 범위)입니다. 생성자와 관련하여 바람직하지 않거나 잘못 되었더라도 기능 변경은 무의미하다고 말하고 있습니까? – Andrew

+0

@Andrew : 구문 문제가 아닙니다. 런타임 문제 (TypeError)입니다. "구문 론적"이라고 말하면, 파서가 SyntaxError를 던지지 않을 것입니다. 예를 들어, 변수에'if' 문을 할당하려고했던 것처럼 말입니다. 나는 – llama

관련 문제