Generator做为状态机与普通状态机的区别及实现

   日期:2020-09-09     浏览:97    评论:0    
核心提示:状态机(有限状态交替变化)有限状态自动机,每运行一次 改变一次状态什么是状态机?以操作系统中的任务调度为例来说明什么是状态机。在操作系统的任务调度中经常见到状态机,其作用是根据任务的状态和当前资源条件来改变任务的状态。任务的状态和资源的条件就构成了一个状态机,参见下图:普通状态机:要依赖于外部的变量,所以导致状态不安全代码实现: var flag=true; function clock(){ if(flag){ console.log(开,flag)

状态机(有限状态交替变化)有限状态自动机,每运行一次 改变一次状态
什么是状态机?
以操作系统中的任务调度为例来说明什么是状态机。在操作系统的任务调度中经常见到状态机,其作用是根据任务的状态和当前资源条件来改变任务的状态。任务的状态和资源的条件就构成了一个状态机,参见下图:

  1. 普通状态机:要依赖于外部的变量,所以导致状态不安全
    代码实现:
 var flag=true;
		function clock(){
		    if(flag){
		        console.log("开",flag)
		    }
		    else{
		        console.log("关",flag)
		    }
		    flag=!flag;
		}
		clock()
		clock()
		clock()
		clock()

输出结果:

因为其状态机是通过外部变量flag的赋值才得以改变状态机的状态的,所以是依赖于外部的变量的,会导致状态的不安全,代码如下测试,加上改变状态的语句flag=true;,测试结果:

var flag=true;
		function clock(){
		    if(flag){
		        console.log("开",flag)
		    }
		    else{
		        console.log("关",flag)
		    }
		    flag=!flag;
		}
		clock()
		flag=true;
		clock()
		clock()
		clock()

结果:

2.Generator 函数实现的状态机:
状态维护在generator函数内部,外部无法修改,状态是安全的

function* generator_clock(){
		    while(true){
		        console.log("开")
		yield;
		console.log("关")
		yield;
		    
		    }
		}

		var gclock=generator_clock();
		gclock.next();
		gclock.next();
		gclock.next();
		gclock.next();

结果:

tip:generator状态机是generator的一大作用,可以把Generator函数理解为一个状态机,他的内部封装了多个状态,当我们执行Generator函数时,他会返回一个迭代器对象,可以遍历他的内部状态
比如:
function* myGenerator(){
yield “hello”;
yield “world”
return “ending”
}
var mG=myGenerator()
console.log(mG.next())
console.log(mG.next())
console.log(mG.next())
console.log(mG.next())
结果:
{ value: ‘hello’, done: false }
{ value: ‘world’, done: false }
{ value: ‘ending’, done: true }
{ value: undefined, done: true }

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服