Javascript 我的发电机不是我想要的那样工作。看起来像一个简单的例子,但不起作用

Javascript 我的发电机不是我想要的那样工作。看起来像一个简单的例子,但不起作用,javascript,function,generator,es6-modules,es6-module-loader,Javascript,Function,Generator,Es6 Modules,Es6 Module Loader,它应该做什么:接受一个字符串,它应该console.log单独的单词。 它的作用:它需要一个字符串和console.log每个字母。我不明白它为什么这么做。我用yield返回整个单词(我用console.log检查了dst),所以它应该console.log,但作为回报,它会通过evry-letter(((非常感谢您的时间!) scripts.js import 'babel-polyfill'; import {wordsCount, getWords} from './other.js';

它应该做什么:接受一个字符串,它应该console.log单独的单词。 它的作用:它需要一个字符串和console.log每个字母。我不明白它为什么这么做。我用yield返回整个单词(我用console.log检查了dst),所以它应该console.log,但作为回报,它会通过evry-letter(((非常感谢您的时间!)

scripts.js

import 'babel-polyfill';
import  {wordsCount, getWords} from './other.js';

window.addEventListener('load', function(){
        let str = '  Its a  good weather! Yeah  ! ';  

        //console.log(wordsCount(str));

        let iterator = getWords(str);
for(let some of getWords(str)){                 
        this.console.log(some);                 
        }
});
其他.js

function stringClear(str)
{
        return str.trim().replace(/ {2,}/, " ");
}

export function wordsCount(str){
        return stringClear(str).split(' ').length;
}

export function* getWords(str){
        str = stringClear(str);
        let dst = "";

        for(let i = 0; i < str.length; i++)
        {
                if(str.charAt(i) == " ")
                {
                        yield* dst;
                        dst = "";
                        continue;
                }
                dst += str.charAt(i);
        }
}

编辑:我想也许我应该更好地解释
yield*
语法。
yield*
将额外迭代目标生成的变量,生成iterable中的每个值。例如:
yield*[1,2,3,4,5]
的行为类似于:
yield 1;yield 2;yield 3;yield 4;yield 5
。这就是为什么要这样做
yield*“abcd”
您获得的收益相当于
收益率“abcd”[0];收益率“abcd”[1];收益率“abcd”[2];收益率“abcd”[3]

在产出前面有一个额外的星号。你在产出的字符串上产出一个迭代器,因此每个产出在产出之后继续之前都会在每个单词字符串上进行额外的迭代*

window.addEventListener('load',function(){
让str=‘天气真好!耶!’;
//console.log(wordscont(str));
让迭代器=getWords(str);
对于(让一些getWords(str)){
this.console.log(一些);
}
});
函数stringClear(str)
{
返回str.trim().replace(/{2,}/,“”);
}
函数wordscont(str){
返回stringClear(str).split('').length;
}
函数*getWords(str){
str=stringClear(str);
设dst=“”;
for(设i=0;i}
只需将
yield*dst;
更改为
yield dst;
,它就会工作

我想,那是错的

但是,如果你碰巧是故意这么做的,并且不知道两者之间的区别,请阅读以下内容-

请注意格式和不必要的代码。这会使我们的工作更轻松。谢谢!如果有助于解决问题,您可以接受答案
I
scripts.js?6962:11 t
scripts.js?6962:11 s
scripts.js?6962:11 a
scripts.js?6962:11 g
2scripts.js?6962:11 o
scripts.js?6962:11 d
scripts.js?6962:11 w
scripts.js?6962:11 e
scripts.js?6962:11 a
scripts.js?6962:11 t
scripts.js?6962:11 h
scripts.js?6962:11 e
scripts.js?6962:11 r
scripts.js?6962:11 !
scripts.js?6962:11 Y
scripts.js?6962:11 e
scripts.js?6962:11 a
scripts.js?6962:11 h