【问题标题】:When does a yield statement get executed in Javascript?什么时候在 Javascript 中执行 yield 语句?
【发布时间】:2014-05-04 16:38:28
【问题描述】:

我对 JS 1.7 的新 yield 功能何时产生值感到有些困惑。

当我这样写我的函数时:

function helloWorld() {
    console.log('hello'); 
    yield "world";
} 

var sayHello = helloWorld();

sayHello.next();

返回:

>"world"
>"hello"

但是当我这样写我的函数时:

function helloWorld() {
    console.log('hello'); 
    yield console.log("world");
}

var sayHello = helloWorld();

sayHello.next();

返回:

>"hello"
>"world"

正如我所料。

我很困惑为什么在第一种情况下“world”在“hello”之前返回,也许我不明白 yield 是如何工作的,谁能详细说明为什么 yield 会这样?

【问题讨论】:

  • 请看这里stackoverflow.com/questions/2282140/…,这可能会回答您的问题。
  • 啊,当我开始使用 yield 语句时,我确实第一次阅读了这个,它本质上是比较了收益和回报。但是,如果我用 return 替换了世界收益,它仍然会在返回“世界”之前记录“你好”。我想知道为什么在调用 next 时,如果它是一个原始值,则在“world”之前返回收益率值?我对python中的生成器和yield非常熟悉,但这在新的JS实现中似乎很奇怪。

标签: javascript generator yield


【解决方案1】:

对不起,这似乎是一个错误。

我尝试使用 Firefox 控制台使用 yield 并输出了这个,但是在我实际构建了一个实际文件并通过 firefox 运行它之后,它的行为符合预期

如果有人好奇

<html>
<head>
</head>
<body>
<script type="application/javascript;version=1.7" >
function helloWorld () {
    console.log("hello"); 
    yield "world";
    yield "END";
} 

var sayHello = helloWorld();

console.log(sayHello.next());

function helloWorld1 () {
    console.log('hello'); 
    yield console.log("world");
    yield "END2";
}

var sayHello1 = helloWorld1();

sayHello1.next();
console.log(sayHello.next());
console.log(sayHello1.next());
</script>
</body>
</html>

输出:

“你好” “世界” “你好” “世界” “结尾” "END2"

【讨论】:

    猜你喜欢
    • 2021-03-21
    • 2015-08-08
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多