前端开发是顺理成章的。程序员的思维逻辑赋予了代码各种能力,但前端开发中经常面临的是用户的操作。在比较复杂的页面中(现在好像很少有简单的页面),用户的操作是不可预知的。如果有很多按钮,每个按钮都会做自己的事情。如果上帝保佑所有这些操作和这些事件之间没有任何限制,结果互不影响,所以没有问题。但是开发中似乎就没有这么好的运气,所以往往需要在这些函数之间协调平衡执行。如果你是纯JS或者单独使用jQuery,遇到这种烧屏的情况会特别明显。前端MVC在一定程度上隐藏和处理了这些问题,但并不完备。这时候你可能需要了解一下“有限状态机”的概念,这在前端开发中应该是一个很有用的东西。描述一下“有限状态机”:有限状态自动机,简称状态机,是表示有限数量的状态和这些状态之间的转换和动作等行为的数学模型。状态(state)的总数是有限的。任何时候,都只会有一种状态。在一定条件下,会从一种状态过渡到另一种状态。根据维基百科:有限状态机(FSM)是用于在事件驱动程序中设计和实施复杂行为组织原则的强大工具。对于前端,尤其是Javascript编程的时候,这个模型的意义在于它可以适用于很多对象。举个具体的例子,比如一个按钮通常是一个普通的按钮,当你点击它的时候它就变成了一个输入。当然,你可能会说,这么简单的功能,我可以直接用jQuery,甚至不用,直接操作DOM显示和隐藏就可以了。如果你还有这种幼稚的想法,我只能说你没遇到过让你想死的页面。..当页面复杂到一定程度时,单纯的操纵DOM去前端处理只会加速你发疯的过程。这里将有限状态机模型应用到Button上,等效的btn对象只有显示状态和编辑状态两种状态。看一下代码:varbtn={//当前状态currentState:'btn', //绑定事件initialize:function(){varself=this;self.on("点击",self.transition);}, //状态转换transition:function(event){switch(this.currentState){case"btn":this.currentState='input';做一点事();休息;case"input":this.currentState='btn';做一点事();休息;默认值:console.log('InvalidState!');休息;}} };以上就是有限状态机的写法,逻辑和层级真的很清晰,状态越多,对象越多,越适合这种写法。通过这种有限状态机的模式,我觉得最重要的一点就是把用户的操作行为,也就是组件的事件响应(比如点击)和组件的行为分开。准确的说,通过建立一个有限状态机的模型,我们不关心用户的点击行为做了什么。此时组件可能有几种状态对应不同的表现形式,用户触发的事件只是切换模型的状态。至于每个状态的具体表现和行为,我们可以单独定义,也就是此时的一个行为和响应的解耦。Github上有两个很好的库,它们都实现了FSM。有兴趣的可以看看:https://github.com/fschaefer/Stately.jshttps://github.com/jakesgordon/javascript-state-machine原文链接:https://img.ydisp.cn/news/20220914/ucys1rmhnn0
