◆ return のときの値は直接 .next の返り値使う時くらいしか使われない(使えない)

yield を使うと generator の途中で処理を停止して続きから処理を実行できます
var gen = function*(){
    var i=0
    while(i++ < 5)  yield i
    return 100
}
for(var val of gen()) console.log(val)
1
2
3
4
5

return を使うとそこでジェネレータの処理を終了するので続きから実行できなくなります
一度 return すると done が true になり 次からは undefined が返って来ます
var gen = function*(){
    var val=0
    while(true){
        val = yield "2倍:" + (val * 2)
        if(typeof val !== "number") return "数字ください"
    }
}
var ite = gen()
ite.next() // 準備
console.log(ite.next(10))
console.log(ite.next(20))
console.log(ite.next(0))
console.log(ite.next("a"))
console.log(ite.next(30))
Object {value: "2倍:20", done: false}
Object {value: "2倍:40", done: false}
Object {value: "2倍:0", done: false}
Object {value: "数字ください", done: true}
Object {value: undefined, done: true}

return したときの値は 最初の done が true になるときの value になります
ですが done が true のときの value は基本的に無視されてしまいます
var gen = function*(){
    yield 1
    yield 2
    yield 3
    return 4
}

console.log([...gen()])
for(var val of gen()) console.log(val)

var gen2 = function*(){
    yield* gen()
    yield 10
}
console.log([...gen2()])
[1, 2, 3]
1
2
3
[1, 2, 3, 10]

yield* のような続きを別のジェネレータに任せる動きを return ではできなそうです
ジェネレータの最後の値のときに done が true になるようにしても 普通は done が true のときの値は使われないので必要ないみたいです

ということで return のときには値を返すようにはしないほうがよさそうです