我想提高我对reentrant一词的理解.
这个函数是可重入的吗?
function* foo() { yield 1; yield 2; }
还有这个?
function foo() { return 1; }
还有这个?
var x = 0; function foo() { return x++; }
还有这个?
function foo() { setTimeout(foo,1000); }
解决方法
reentrent函数是一个可以恢复执行的函数:
In computing,a computer program or subroutine is called reentrant if it can be interrupted in the middle of its execution and then safely called again (“re-entered”) before its prevIoUs invocations complete execution.
在浏览器/节点JavaScript中,所有多处理都是协作的(没有中断或上下文切换).常规函数始终在JavaScript中完成. (1)
所以在你的情况下 – 唯一的reentrent函数是第一个,因为它没有运行它的代码完成,可以在以后恢复.
>第二个功能只是一个常规功能.
>第三个使用外部范围,它有点类似,因为它允许函数保持某种状态.虽然功能无法恢复,但这不是一回事.
>第四个只是立即运行完成(它安排了它的另一个调用 – 但这取决于平台而不是JavaScript).
确实 – 可以说生成器使用重复的语法在JavaScript中实现协作式多任务处理.在生成器之前,所有代码都运行完成
(1)或者它永远不会停止,但它永远不会中断.此外 – 在通用平台.有一些平台(如Rhino)打破了规则.它们非常罕见,并且不使用与浏览器/节点JS相同的并发执行模型.