2013-06-05 2 views
2

나는 오늘 javascript에서 yield 키워드를 발견했으며, 현재 ECMA 6가 업그레이드되지 않은 브라우저에서는 지원되지 않는다는 것을 알고 있습니다. 한편 파이어 폭스에서, 내가 어떻게 직접 해당이 없다 yield자바 스크립트에서 'Yield'키워드를 이해하고 계십니까?

if (currentNode) { 
    yield currentNode; 
    currentNode = null; 
} 
+1

당신은 수 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/yield가) – RobG

답변

3

없이 다음 코드를 다시 작성할 수 있습니다. 그러나 "생성자"객체를 반환하여이를 위조 할 수 있습니다. 기본적으로 연속 코드은 발전기의 next()으로 이동됩니다.

function fib() { 
    var i = 0, j = 1; 
    while (true) { 
    yield i; 
    var t = i; 
    i = j; 
    j += t; 
    } 
} 

var g = fib(); 
for (var i = 0; i < 10; i++) { 
    console.log(g.next()); 
} 

그리고 가짜 발전기 사용하여 작성된 재 :

fib-generator example on MDN 고려 이제이 관찰 변경 가능한 상태의 추가와 함께 약간 난이도가 될 않습니다

function fib() { 
    var i = 0, j = 1; 
    return { 
     'next': function() { 
      var yieldRet = i; 
      // These haven't occurred before the `yield` in the above generator, 
      // but it makes it easier to do it in the same order here. 
      // Just make sure there are no OBSERVABLE side-effects. 
      var t = i; 
      i = j; 
      j += t; 
      return yieldRet; 
     } 
    }; 
} 

var g = fib(); 
for (var i = 0; i < 10; i++) { 
    console.log(g.next()); 
} 

을; 주어진 예제는 여전히 상태 머신으로 표현 될 수 있습니다. 각 next은 상태를 "전진"시킬 수 있습니다.

var currentNode; 
function yield1() { 
    var y = { next: st0 }; 
    return y; 
    function st0() { 
     if (currentNode) { 
      y.next = st1; 
      return currentNode; 
     } else { 
      y.next = stZ; 
     } 
    } 
    function st1() { 
     y.next = stZ; 
     currentNode = null; // observable side-effect! 
    } 
    function stZ() { 
    } 
} 

var g = yield1(); 
currentNode = "x"; 
console.log(g.next()); // "x" 
console.log(currentNode); // still "x" 
g.next(); 
console.log(currentNode); // null 
+0

선언 할 수있는 [자바 스크립트 ™ 문서]를 시도'수율 'like this : yield {Variable1 : value, Variable2 : value}; –

+0

@ 노발 모한처럼 .. 뭐라고? 그게 무슨 뜻인지는 모르겠다. – user2246674

+0

나는 JavaScript에서 WBXML 파서 (https://github.com/mozsquib/jswbxml/blob/master/wbxml.js)를 사용하고 있으며, '수확량 (Yield)'의 사용은 내 마음을 '수율'의 개념을 완전하게 파악하기 위해 돌린다. –

관련 문제