当yield不存在时,它们是相同的,当然在运行阶段不一样。
function* add(x, y) {
return x + y;
}
var it = add(2, 3);
it.next();
和
function add(x, y){
return x + y;
}
add(2, 3);
作为一种习惯,使用它们代替正常功能安全吗? 尽管表现不佳。
安全吗?
只要您的环境支持生成器功能(大多数旧环境不支持),那么当然,它是“安全的”。如果您想支持遗留环境,那么您必须转译您的程序。
可以吗?
如果它是你的程序并且只有你必须维护它,那就做你想做的事。但是,如果您正在与其他人合作或发布一些内容供社区使用,那么当普通函数调用 (
f(x).next().value
) 就足够了时,其他程序员不可能想使用生成器 API (f(x)
) 来完成所有事情
...尽管有性能
这是否意味着您知道生成器与普通函数相比具有糟糕的性能?我没有基准测试,但我估计生成器至少比普通函数慢 10 倍,甚至更慢。
...所以这种情况下不需要切换
在 JavaScript 的未来,永远不会出现每个人都回到旧程序并更新所有函数以使用生成器的情况。生成器有一组非常具体的用例,在普通函数可以很好地完成工作的情况下使用它们是相当愚蠢的。