JS学习笔记(一)

news2024/9/29 11:27:22
  • 从编程模式看:JS是结构化、事件驱动的动态语言,支持声明式和指令式两种模式,所以JS是一个多模式的语言。
  • 面向对象和函数式是常用的两种模式。

函数式编程

  1. 基本概念:函数是什么?函数是数据集到目标的一种关系。在函数式编程中,常把对函数的各种干扰称为副作用。函数内部较为相对可控,外部环境则比较不可控。
  2. 函数的副作用分为三大类:
    • 全局变量。
    • IO影响:用户的输入行为或者是文件系统、网络链接以及stream的stdin(标准输入)和stdout(标准输出)。
    • 网络请求。
  3. 如何解决副作用:
    • 纯函数:解决内循环,确保函数的返回结果的变化只依赖自身参数,并且执行过程中没有副作用。通过减少对外界不确定因素的依赖来减少副作用。
    • 不可变(immuatbility):解决外循环,在减少函数被外界影响的同时,确保函数自身对外界的影响。
    • 总结:纯函数只对值影响一次(数学知识中的幂等的概念),不可变则不影响(状态管理,记录状态改变,而不修改状态)。
  4. 总结:
    • 函数式编程的最核心的地方,就是输入输出和中间的算法,我们要解决的核心问题就是副作用。
    • 纯函数和不可变式解决副作用的两个重要概念:纯函数强调自身的稳定性,对结果只影响一次。而不可变强带哦的是和外界的交互中,尽量减少相互间负面的影响。

面向对象编程

  1. 基本概念:对象是主体,函数可以看成是工具,工具和方法都是服务于对象的。
  2. 封装、重用和继承
    • 如果说函数加对象形成了生产力,那么封装、重用和继承可以用来组成生产关系。
    • 封装:组件和模块是通过封装导入加载到页面的。
    • 重用:把重复使用的功能抽象到一个类里,每次只创建一个它的实例对象使用。
    • 继承:通用功能会放到抽象类中,而一些特定的行为或属性,可以通过继承放到实现类中。
    • 组合:继承会出现抽象的层级过多导致代码难以理解和父类除了问题导致子类出现问题,为此面向对象中还有一个组合的概念,一个字累不是继承的某个父类,而是组合多个类形成一个类。通常组合是优于继承的。
  3. 基于原型的继承:
    • JS中对象和类没有拷贝的从属关系,而是原型链接关系。即使es6引入了类,但是底层仍旧是基于原型的面向对象。es6中类的数据类型就是函数,类本身就指向构造函数。
    • es6中的class:它在es6被当成关键字引入,但只是语法糖,JS仍旧是基于原型的。
      • 类的本质就是个function
        在这里插入图片描述

      • 类的构造函数指回本身
        在这里插入图片描述

      • 通过原型对象添加方法
        在这里插入图片描述

      • 构造函数创建的实例对象有_proto_原型指向构造函数的原型对象
        在这里插入图片描述

    • 原型 与原型链
      • 在JS中两个对象之间创建关联,一个对象通过委托单方式访问另一对象的属性和函数被称为继承。
      • 当谈及到继承时,JS只有一种数据结构也就是对象。每个实例对象都有一个_proto_原型属性,该属性指向构造函数的原型对象(prototype)。该原型对象都有一个自己的原型属性(proto)指向上一层构造函数的原型对象,如此层层向上直到一个对象的原型对象为null终止。
      • 实例对象的_proto_原型属性指向构造函数的原型对象开始,借助原型对象的_proto_属性层层向上直到指向的原型对象为null终止,被称为原型链。JS就是通过原型链来实现继承。
      • 每个原型对象(prototype) 都有一个constructor属性指向关联的构造函数。
      • _proto_称为隐式原型,prototype称为显式原型,可获取的constructor其实是从原型对象中获取的,这也反应了原型链的机制。
      • prototype 无法直接修改、引用。从es6开始object.getPrototypeOf()和Object.setPrototypeOf()来访问、修改原型对象。

总结

  • 函数式编程和面向对象编程,一个是管理和解决副作用,一个是服务于业务对像。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/438369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows逆向安全(一)之基础知识(十)

汇编一维数组 之前的文章学习过了四种基本类型:char short int long的汇编表示形式 因为它们的数据宽度都小于等于32位,所以都可以只用一个通用寄存器来存储 接下来的数组显然就无法只用一个通用寄存器就可以存储了 在学习数组之前,再学习…

云可见性和端口欺骗:已知的未知

与所有技术一样,新工具是建立在以前的基础上的迭代,经典的网络日志记录和指标也不例外。 网络流量的工具、检测和监控在私有云和内部部署中几乎没有变化。今天使用的许多日志和指标已有将近二十年的历史,最初是为了解决计费等问题而设计的。…

Node 08-express框架

express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架,官方网址: https://www.expressjs.com.cn/ 简单来说,express 是一个封装好的工具包,封装了很多功能,便于我们开发 WEB 应用(HTTP 服务)…

强训之【查找组成一个偶数最接近的两个素数和二进制插入】

目录 1.查找组成一个偶数最接近的两个素数1.1题目1.2思路1.2.1 暴力解法1.2.2 取中判断 1.3代码1.3.1暴力求解代码1.3.2 取中判断代码 2.二进制插入2.1题目2.2思路2.3代码 3.选择题 1.查找组成一个偶数最接近的两个素数 1.1题目 链接: link 描述 任意一个偶数(大于…

Android学习Day1

Android学习笔记 了解Android 的结构ActivityAndroid中的布局了解安卓的结构ActivityAndroid中的布局代码展示(登录界面的实现):实现效果:代码展示(注册界面的实现)实现效果一些之前学习的笔记end 了解Android 的结构 Activity …

服务(第八篇)location和rewrite

常用的Nginx正则表达式: 从功能看,rewrite和location似乎有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,还可以proxy_pass到其他机器。 rew…

企业如何挑选设备管理系统?

在当今高度竞争的市场环境中,企业需要不断提高生产效率、确保设备的可靠性和安全性以降低运营成本。设备管理系统(Equipment Management System,简称EMS)是一种帮助企业实现这些目标的有力工具。本文将为您解析企业如何挑选合适的…

提高亚马逊等其他跨境平台的曝光率方法有哪些?

很多卖家都会想尽办法提高自己店铺的曝光率,但有些新手卖家可能不知道曝光率意味着什么 简单来说,曝光率是指你自己的店铺和产品被呈现给顾客的次数,一般来说,曝光率通常决定了你店铺的总流量,交易总量,订…

PM866 3BSE050200R1高压变频器的四种控制方法

PM866 3BSE050200R1高压变频器的四种控制方法 高压变频器装置指驱动输入电源为6,000V或10KV的电机装置,高压变频器一般主要有下列几种方案选择: 一、直接高压控制(高成本) 目前以采用美国罗宾康类似的无谐波变频技术&a…

凌恩生物美文分享|3月客户文章盘点——累计IF=105,平均IF=8.08

凌恩生物以打造国内一流生物公司为目标,在科研测序领域深耕不辍,吸纳多名在生物信息高级技术人员的加盟,参与并完成多个高科技项目。现已在宏组学、基因组、表观遗传以及蛋白代谢等多组学及联合分析领域积累了深厚经验,打造出成熟…

ASP.NET Core MVC 从入门到精通之布局

随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生&#xff0c…

核心业务4:标的管理

核心业务4:标的管理 1.标的管理流程图 2.数据库表设计 3.前端逻辑设计 4.后端逻辑设计 5.标的放款TODO 核心业务4:标的管理 1.标的管理流程图 ①上一个核心业务通过审核借款申请结束

mybatis-plus的代码生成器的应用

目录 1.工程引入mybatis-plus3-generator代码生成器2.只需要关注mybatis-plus-config.properties然后生成代码3.分别添加依赖解决报错4.加入其它配置然后测试效果 3.4版本 1.工程引入mybatis-plus3-generator代码生成器 mybatis-plus3-generator放入项目工程中,父工…

JeecgBoot 3.5.1 版本发布,开源的企业级低代码平台

项目介绍 JeecgBoot是一款企业级的低代码平台!前后端分离架构 SpringBoot2.x,SpringCloud,Ant Design&Vue3,Mybatis-plus,Shiro,JWT 支持微服务。强大的代码生成器让前后端代码一键生成! JeecgBoot引领…

kafka manager服务部署

1.配置一台centos7主机或者直接在kafka服务主机上部署也可以,关闭firewalld和selinux服务 2.安装java环境(需要jdk11以上) 参考:jdk1.8环境配置_Apex Predator的博客-CSDN博客 3.从github上下载编译好的cmak压缩包(下载最新版本的3.0.0.6) 下载地址&a…

Gradio 部署工具保姆级教程来了,以图生图,画你所想

2023 年以来国内各家大厂竞相发布大模型,AIGC 的热度来到了前所未有的高度,AI 绘画在国际艺术博览会上频频夺冠,数字艺术的新纪元正在逐渐展开。你是否也想与顶尖技术人员一起,参与到 AIGC 的浪潮中呢? 2023 PaddlePa…

source insight4.0使用技巧总结

一、技巧1:查看函数调用关系 步骤 1:在主菜单中点击下图中的按钮 图 1 打开relation界面 步骤 2:在弹出的relation界面点击“设置”按钮, 图2 点击“设置”按钮 步骤3: 在“设置”界面中,“Levels”选择…

一文详解一致性协议

目录 一致性协议 2PC二阶段提交 二阶段提交存在的问题: 3PC 三阶段提交 优点 Paxos算法 流程演变 Paxos优缺点 活锁问题 ZAB协议(Fast Paxos) 一致性协议 事务需要跨多个分布式节点时,为了保证事务的ACID特性,需要选举出一个协调者…

LeetCode 1105. Filling Bookcase Shelves【记忆化搜索,动态规划】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

甘特图控件DHTMLX Gantt入门使用教程【引入】:dhtmlxGantt与ASP.NET Core(下)

DHTMLX Gantt 是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求,具备完善的甘特图图表库,功能强大,价格便宜,提供丰富而灵活的JavaScript API接口,与各种服务器端技术&a…