2014-02-25 3 views
7

이 우상 : function*(){ ... }이 페이지에서 https://github.com/jmar777/suspend이 무엇인지 확실하지 않습니다.nodej에서 "function *()"은 무엇을 의미합니까?

아무도 설명 할 수 있습니까? 감사합니다.

+1

http://wiki.ecmascript.org/doku.php?id=harmony:generators –

+0

이것은 생성 함수 (EcmaScript)이며 질문은 이미 답변되었습니다 [여기] (http://stackoverflow.com/questions)/9620586/function-in-javascript). –

답변

4

이것은 함수가 생성 함수임을 의미합니다. http://wiki.ecmascript.org/doku.php?id=harmony:generators#syntax

* 토큰이있는 함수를 생성기 함수라고합니다.

일반 함수는 결과를 실행하고 반환합니다. 그러나 생성자는 값을 내고 다시 호출 할 때까지 기다립니다. 다음 함수는 실행을 재개합니다.

일반적으로 생성자 함수는 반복됩니다. 그들은 값을 값으로 가져오고 다음 함수 호출에서 실행을 다시 시작하기 위해 대기하므로 무한 값 생성기에 유용합니다.

그들은 메모리 효율도 있습니다. 예를 들어, 10000000 숫자를 생성하고 싶다고 가정 해 봅시다. 배열에 저장하면 컴퓨터의 메모리가 소모 될 수 있습니다. 그러나 우리가 발전기를 사용한다면 하나의 숫자와 항복 값을 생성 할 수 있으며, 다시 호출되면 실행이 재개되고 다음 숫자가 생성 될 수 있습니다.

우리는 예, here 볼 수

,

function* fibonacci() { 
    let [prev, curr] = [0, 1]; 
    for (;;) { // Infinite looping 
     [prev, curr] = [curr, prev + curr]; 
     yield curr; 
    } 
} 

을 내가 말했듯이 발전기 기능이 실제로 무한 루프를 가지고 참조, 발전기이

for (n of fibonacci()) { 
    // truncate the sequence at 1000 
    if (n > 1000) 
     break; 
    print(n); 
} 

처럼 반복된다. yield curr이 실행되면 n of fibonacci()n으로 값이 반환됩니다. 이것은 반복에서 사용되며 생성자가 다시 호출 될 때 실행을 다시 시작하고 (변수에서도 데이터를 유지함) 다음 요소를 생성합니다.

관련 문제