你不知道的JS 中——yield

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script>
        function *foo() {
            var x = yield 2;
            z++;
            var y = yield (x * z);
            console.log(x, y, z);
        }

        var z = 1;

        var it1 = foo();
        var it2 = foo();

        var val1 = it1.next(555).value; // 2
        var val2 = it2.next(5555).value; // 2

        // 得 next(20),这个传入值将是 var x = yield 的值, yield 表达式为 20, 故 x = 20
        // 而此时 val1 是 var y = yield (x * 2) 中的 yield 返回值。
        // 也就是说,一个 yield  要调用两次 next() 才能得到这个表达式的值。
        val1 = it1.next( val2 * 10 ).value;
        val2 = it2.next(val1 * 5).value;

        it1.next(val2 / 2 );
    </script>
</body>
</html>

 

posted @ 2021-10-20 22:01  し7709  阅读(563)  评论(0编辑  收藏  举报