Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在生成器递归中只运行一次下一个函数?_Javascript_Arrays_Recursion_Generator - Fatal编程技术网

Javascript 为什么在生成器递归中只运行一次下一个函数?

Javascript 为什么在生成器递归中只运行一次下一个函数?,javascript,arrays,recursion,generator,Javascript,Arrays,Recursion,Generator,在我看来。我必须通过下面的代码多次运行next函数 代码环境:谷歌浏览器。版本:63.0.3239.132。 const a = [1,2,3,[4,5],6,[7,8]]; function *fun(array){ for(let i = 0;i<array.length;i++){ if(Array.isArray(array[i])){ yield *fun(array[i]); } } } console

在我看来。我必须通过下面的代码多次运行
next
函数

代码环境:谷歌浏览器。版本:63.0.3239.132。

const a = [1,2,3,[4,5],6,[7,8]];

function *fun(array){
    for(let i = 0;i<array.length;i++){
        if(Array.isArray(array[i])){
            yield *fun(array[i]);
        }
    }
}

console.log(fun(a).next().done);//true
为什么在递归示例中,它只运行一次,而迭代器却运行了一次


顺便说一句,这本书中的疑问是
您不知道第3章
中的JS

对于非数组的项,您缺少了
yield
语句:

const a=[1,2,3,4,5,6,7,8];
功能*乐趣(数组){

for(设i=0;i为什么在if子句中的
之后加上
}
?这是我的代码习惯吗?是对还是错?这是一个错误。在代码中,当值不是数组时,不会产生任何结果。当您迭代第一个数组并找到数组作为项时,您将委托给一个新的生成器(相同,但在数组值上)。
yield*fun
表示您将委托给一个新的迭代器。您在等待什么行为?
function *foo() {
    yield 1;
}

const iterator = foo();
console.log(iterator.next().done);//false
console.log(iterator.next().done);//true