如何用JavaScript实现有限状态机?

23 min read

JavaScript可以通过设计状态表、判断状态转移条件等方式来实现有限状态机。下面是一个简单的例子,通过代码实现了一个简单的两个状态的有限状态机。

//定义两个状态
const OFF = 0;
const ON = 1;

//定义状态转移表
const fsm = {
  [OFF]: {
    toggle: ON, //如果当前状态是OFF,执行toggle操作会进入ON状态
    message: 'The machine is currently off.' //如果状态是OFF,输出此信息
  },
  [ON]: {
    toggle: OFF, //如果当前状态是ON,执行toggle操作会进入OFF状态
    message: 'The machine is currently on.' //如果状态是ON,输出此信息
  }
};

//定义当前状态,默认是OFF状态
let currentState = OFF;

//定义操作函数,传入操作名
function operate(op) {
  //如果对应状态没有此操作,输出错误
  if (!fsm[currentState][op]) {
    console.log('Error: invalid operation');
    return;
  }
  //获取下一个状态
  const nextState = fsm[currentState][op];
  //输出信息
  console.log(fsm[nextState].message);
  //修改当前状态为下一个状态
  currentState = nextState;
}

//使用操作函数
operate('toggle'); //输出The machine is currently on.
operate('toggle'); //输出The machine is currently off.
operate('invalidOp'); //输出Error: invalid operation

以上代码中,我们定义了两个状态OFFON,使用状态转移表fsm来确定操作后的下一个状态以及要输出的信息。使用operate()函数来执行不同的操作,同时更新当前状态并输出相应信息。