暂时未有相关云产品技术能力~
擅长 前端/Rust/AI
函数即对象 闭包
• 作用域(Scopes) • 词法环境(Lexical environments) • 作用域链 • 执行上下文 • 调用栈
Chromium本身就是一个浏览器 Chrome浏览器一般选择Chromium的稳定版本作为它的基础 浏览器大战,其实就是渲染引擎之争 v8是「JS虚拟机」的一种 源代码对 V8 来说只是「一堆字符串」 执行JS代码核心流程 1. 先编译 2. 后执行 V8采用「JIT」(Just In Time)技术提升效率
1. CPU = 运算单元 + 数据单元 + 控制单元 2. CPU 只能识别「二进制」的指令 3. 总线像连接 CPU 和内存这两个设备的高速公路 4. 执行高级语言的两种方式:1. 解释执行 2. 编译执行 5. 汇编语言和机器语言是一一对应的 6. 内存中的每个存储空间都有其对应的独一无二的地址 7. CPU时钟周期:取出指令、分析指令、执行指令这三个过程
JS组成 JS数据类型(7+1) 类型转换(装箱/拆箱)
• 浏览器架构总览 • 进程、线程 • 站点隔离 • 渲染流程总览 • 导航阶段 • UI进程👉拼装URL • 网络进程👉获取数据 • 重定向 • 根据Content-Type进行数据处理 • 唤起渲染进程 • 更新Tab状态 -->导航阶段结束 • 渲染阶段 • 编译处理 • BNF • HTML 解析器 • DOM • 标记算法 • DOM树构建算法 • 处理子资源 • 将CSS附加(attachment)到DOM节点==>生成Render Tree • CSS 解析器 • 创建呈现器 • 属性标准化 • 样式计算并保存到ComputedStyle • 布局(Layout)
a. 组件封装 • RenderProps增强版 • Web Component • 配置化(LCD) b. 逻辑复用 • 中间件(MiddleWare) • Redux Thunk • 监听history • stateComponment
a. React是什么 • 前端场景下MVC架构 • Flux设计模式 • Redux + React = MVC b. JSX • 手动实现一个JSX转换器
• 1.内存的生命周期 • 2.堆和栈 • 栈:静态内存分配 • 堆:动态内存分配 • 示例 • 3.JS中的引用 • 示例 • 4.垃圾回收 • 引用计数 • 标记清除 • 5.内存泄漏 • 将变量挂载到全局变量 • 关闭定时器和清除回调函数 • 清除DOM 引用
• 1.JS如何在浏览器中运行 • 调用栈 • 堆栈溢出 • Web APIs • 回调队列 • 事件循环 • setTimeout(fn,0) • 工作队列和异步代码 • Promises • promises适合在哪里
随着数字时代的到来,可以说一切的生活,都是基于网络的。而在有些特定的场景中,涉及到私密信息的时候,总是会有心怀鬼胎的人去捏造事实和进行造谣,变成三人成虎的一个尴尬的局面。 所以就需要一种技术去识别私密文本的发布者。从而找出真凶。
执行环境(execution context) 中的 context 有着上下文和环境两层含义。
其实React中组件化,是一个编程思路,我感觉,懒人才可以真正的领略到他的魅力,因为懒人才可以想出让自己书写代码,更快,更高,更强的方式。 这也是一种编程习惯和方式。用最短的时间,写最少的代码,干最漂亮的代码。 希望我啰嗦这么多,能对你有所帮助。如果大家看到有哪里不是很明白的,可以评论区,留言。如果感觉还不是很尽兴。没关系,这些东西,有很多。 其实每天都在吵吵组件化,组件化,组件化是在实际开发项目中,在解决实际业务中,才会有灵感。他主要的目的是解决实际问题,而不是闭门造车。
简单介绍了useState/useEffect的使用方式,我相信大家在使用过程中,肯定遇到了比这还复杂的。但是,万变不离其宗。都是利用hook的一些API。为函数组件赋予状态。 还有一点,因为在使用useState或者useEffect的时候,我们可以将相关的代码进行统一处理,这样不管在业务开发还是代码维护上,变的很清楚。而不是像原来的开发一样,一个生命周期包含着无数的不相干的逻辑代码。 并且,hooks还支持自定义。本人认为,这才是hooks的真正强大之处。通过自定义一些业务代码,真正的实现逻辑复用。可以有效的减少wrapper hell。让代码实现切片化编程。
闭包对于前端开发者来说,既十分重要,又非常难理解。如果能很好的理解它,那你将能写出很多高逼格的代码,并且成为人生赢家,赢取白富美。 这篇文章,我们来一起简单的认识一下,你走向人生巅峰的敲门砖(闭包)。 Note: 闭包不是JS所特有的。它是一个计算机概念,应用的场景也很多。
greet获取了它应获取的参数,curry也停止了递归处理。并且,我们也获得了想要的结果Hello,范北宸。 其实利用curry对greet经过如上处理之后,现在处理之后的函数能够同时接收任意(n≥0)的参数。
不管是前端老司机还是刚接触前端的"菜鸟"。模块化想必在每天工作中,或多或少都会接触到。尤其针对一些针对React、Vue开发的同学来说,那就是每天都会脱口而出的一个必备术语。并且在很多技术文档中,都常常看到AMD、UMD、COMMONJS还有ES6中的module。 但是,模块化的本质是什么!前端是如何从"茹毛饮血"的<script>到现在es6的module的呢。 今天我们就来唠唠这段鲜为人知的故事。
大多数的高级模式都可以互相组合用于构建一个更加方便的模式。如果想要构建一个比较复杂的程序。可以尝试loose augmentation、private state、 和 sub-modules的组合。
让我们就开始惨案的解密过程吧。 首先,我们不按常规去思考上面的疑惑,我们需要在破案之前,需要一些准备工具。 首先让人很刺眼的一个是:Object.defineProperty。既然遇到了,我们就来会会他。
全新对象;给对象赋值;Prototypes;设置属性;对象字面量
如果理解核心函数的调用机制,同时验证一些以核心函数为基础的其他实现方式的运行机制,关于上述所说的问题就会迎刃而解。
在实际项目开发中,不管是后端还是前端,最基本的操作就是数据的CRUD。换句话说,后端是根据某些条件组装数据,前端是拿着后端提供的数据,进行数据展示。但是不管在进行数据封装还是展示,其中在特定的场景下,需要根据某些条件,对数据进行排序。而在既定的现有框架下,都有现成的方法对数据进行排序处理。 但是,在开发中,有没有想过,这些排序底层是如何实现的,还有就是针对不同的数据,不同的排序是否在性能方面有不同的体现。
使用Webpack4并启用production模式;处理lodash.js;处理moment.js;作用域提升(Scope hoisting)
最近在公司接了一个老项目迁移React。在组件开发过程中,发现有一些组件的处理逻辑很类似。想在某一个地方来统一处理。进过思考和分析,发现HOC(higher-order component)很适合完成此类工作。 再次来总结HOC的概念和基本用法。
组件隔离适用范围 同一个页面引用多个相同的自定义公共组件(该类组件拥有自己的Redux)并且这些组件之间有交互。 案例背景 在一个页面中存在两个相同的公共组件(A),在页面处理中,对A组件进行操作,有一些重要的数据被存入到A组件的对应的Redux中。 如果该页面只存在一个A组件,不管进行如何的操作,数据都是一份。但是如果该页面中存在多个A组件,在对第一个A组件进行数据处理之后,数据存入到Rudex中。此时在对另一个A组件进行相同的操作步骤,但是存入的数据和第一个A组件的存储在Redux中的数据有差别,此时在第二个A组件的操作就会影响第一个A组件的数据。
在现今前端项目中,模块化是一个避不开的话题。所以就会出现AMD,CMD等模块加载方式。同时由于JS不停的在更新迭代。出现很多实用的新语法。但是由于有些语法有些超前,JS的宿主环境(浏览器/Node没有跟上JS更新步骤),但是为了在项目中使用这些好用到令人发指的新特性,来提高开发效率等。就出现了各种前端编译插件(Babel)。
Babel is a JavaScript compiler babel主要的职责就是将一些前沿时髦的JS特性通过"翻译"用到老旧的‘宿主’环境里。(浏览器,Node等)