当前位置: 首页 > Web前端 > HTML

一个小故事引发的讨论:在JavaScript中使用函数式编程

时间:2023-04-02 20:29:04 HTML

前言昨天的文章中提到了一个小插曲。(小)老板“SB...”???然后就开始了下面的对话:小:最近TM烦死我了:怎么了?心态有点炸裂。我:具体情况是怎样的?让小弟帮你解决后顾之忧。肖:你之前不是只是独立负责项目,从0到1实现起来感觉不是太难。但是最近在原有的基础上又增加了一些新的业务需求,之前的代码需要改变。总会有一些问题。函数中的全局变量被改变,很多函数失效。因此,需要对其使用位置进行调试和跟踪。..我:在写代码之前,我通常会在拿到项目/产品需求后花很多时间思考设计。比例可能是7:3,甚至8:2;经验是一方面。思考还是很重要的。回到你的问题,假设你前期有一些工作没有做好,比如:编码设计;整体模块划分;工程框架(做一些单元测试,覆盖率测试..)和其他措施。今天就和大家聊聊如何解决这些小问题!!我展开了一系列的造作和舔狗操作....回到今天文章的主题来介绍编程范式以及如何在JavaScript中使用它。什么是编程范式?编程范式(Programmingparadigm)是指计算机中编程的典型模型或方法。编程范式主要包括:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)。命令式编程:命令式编程的主要思想是关注计算机执行的步骤,即一步步告诉计算机先做什么。例如:如果要输出变量和变量的组合,需要告诉计算机:第一步:创建一个变量(名称)名称;第二步:创建变量(问候语)greeting;第三步:控制台.log输出varname="wlove";//statementvargreeting="hello,I'm";//statementconsole.log(greeting+name);//outputhello,I'mwolove声明式编程:语句式编程是将程序执行的逻辑表达在数据结构的形式。它的主要思想是告诉计算机做什么,而不是指定如何做。最接近的时间表是说Web编程中使用的HTML和CSS属于声明式编程。(解释:HTML/CSS的写法其实是结构化的,并没有具体具体告诉计算机具体要做什么,所以属于声明式编程;其实和很多配置文件很相似。)最直接的例子就是SQL:SELECT*FROMtableWHEREnum<5通过观察声明式编程的代码,我们可以发现它有一个特点就是不需要创建变量来存储数据。另一个特点是它不包含for、while等循环控制代码。函数式编程:函数式编程和声明式编程之所以相关,是因为它们有相同的思想:即只关注做什么而不是如何做。但是函数式编程并不局限于声明式编程。函数式编程最重要的特点就是“函数优先”,即函数可以出现在任何地方,比如你可以将一个函数作为参数传递给另一个函数,不仅如此,你还可以将一个函数作为返回值价值。重要的一点;如果你用好这种编程,你只需要考虑一个输入和输出流。什么对象(原型)和它的副作用(交互作用)不需要考虑。说到函数式编程,可能接触过其他语言的朋友会立刻想起Haskell、Clojure等语言。事实上,大多数常见的编程语言都已经提供了对这种编程方式的支持;比如今天的主角JavaScript。与之前的命令式编程相比;声明式编程,我更喜欢使用函数式编程。首先,我尝试了面向对象(原型)编程方法。这是非常混乱或痛苦的;每一次调试都让人耳目一新;其次,函数式编程可以让代码的逻辑更加清晰优雅;更安全。(总之个人用起来很爽)JavaScript中函数式编程的几个介绍:说到函数式编程,最基本的需要考虑sideeffect(无副作用)和pure(纯粹);如果这样实现的话,可以合理的解决小boss调试一个变量,跟踪变量在哪里被修改的一个很重要的问题...;//例1purefunctionfunctiongreet(name){return"helloI'm"+name;}greet("wlove")//helloI'mwlove//例2不纯函数使用外部变量varname="wlove"function_fn(name){returnpre+str}greet(name)//helloI'mwlove函数式编程还有一个特点就是高阶函数(也是推广的重要知识点);函数可以作为函数返回。//高阶函数:functiongreet(greeting){returnfunction(name){returngreeting+""+name};}varGREETING=greet("helloI'm");GREETING("wlove");//“HelloI'mwlove”函数式编程还有另一个问题需要思考;如果说每次都重新生成一个Copy对象(比如入参是数组);每次更改时都会重新生成。那会增加空间使用率。如何解决这个问题呢?大家可以考虑一下或者查阅一些资料。留言讨论。上一篇生活日记:20210524日常生活的重复。会议;学习;编写代码;跑步;写文章;录制视频;参观社区......只是开心。这篇文章主要是因为我特别想帮(tian)小老板哈哈;可以看作是乱写;欢迎大家留言讨论。后面评论会补充如何有效解决空间问题。聊完之后,我家小老板就表扬我了,不知道是不是我没练过。我应该主动和别人聊天。哎,下一个JS引擎,作为前端,你需要知道什么,怎么学。