摘要: 前面二篇学习了函数式编程的基本概念和常见用法。今天,我们来学习函数式编程的最后一个概念——函子(Functor)。 相信有一部分同学对这个概念很陌生,毕竟现在已经有很多成熟的轮子,基本能满足我们日常的业务开发,所以没必须重复造轮子。但是,作为一名(未来)优秀的程序员,光会用怎么能行呢?必须要理解更深 阅读全文
posted @ 2019-10-27 17:19 奔跑的瓜牛 阅读(1960) 评论(0) 推荐(0) 编辑
摘要: 上一篇介绍了 "闭包和高阶函数" ,这是函数式编程的基础核心。这一篇来看看高阶函数的实战场景。 首先强调两点: 注意闭包的生成位置,清楚作用域链,知道闭包生成后缓存了哪些变量 高阶函数思想:以变量作用域作为根基,以闭包为工具来实现各种功能 柯里化(curry) 定义: 柯里化是把一个多参数函数转换为 阅读全文
posted @ 2019-10-22 23:01 奔跑的瓜牛 阅读(2449) 评论(1) 推荐(4) 编辑
摘要: 函数式编程的历史 函数的第一原则是要小,第二原则则是要更小 —— ROBERT C. MARTIN 解释一下上面那句话,就是我们常说的 一个函数只做一件事 ,比如:将字符串首字母和尾字母都改成大写,我们此时应该编写两个函数。为什么呢?为了更好的复用,这样做保证了函数更加的颗粒化。 早在 1950 年 阅读全文
posted @ 2019-10-20 14:32 奔跑的瓜牛 阅读(3171) 评论(4) 推荐(3) 编辑
摘要:       本人毕业一年,在第一家公司实习一年、工作一年,2019 年 8 月 9 号正式离职(裸辞)。走的那一刻心情很复杂,并没有一丝轻松的感觉。第一次裸辞,从福州去往上海——一个陌生的城市,无依无靠,一切靠自己。又没什么辞职经验,未来与 阅读全文
posted @ 2019-09-08 23:58 奔跑的瓜牛 阅读(4632) 评论(19) 推荐(8) 编辑
摘要: 实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj = {} // 1.创建一个空对象 let constructor = [].shift.call( 阅读全文
posted @ 2019-08-03 16:23 奔跑的瓜牛 阅读(28327) 评论(5) 推荐(5) 编辑
摘要: 浏览器存储的方式有哪些 特性 cookie localStorage sessionStorage indexedDB 数据生命周期 一般由服务器生成,可以设置过期时间 除非被清理,否则一直存在 页面关闭就清理 除非被清理,否则一直存在 数据存储大小 4K 5M 5M 无限 与服务端通信 每次都会携 阅读全文
posted @ 2019-08-03 10:21 奔跑的瓜牛 阅读(33358) 评论(1) 推荐(8) 编辑
摘要: Vue 双向绑定原理 mvvm 双向绑定,采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的 setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。 几个要点: 1、实现一个数据监听器 Observer,能够对数据 阅读全文
posted @ 2019-07-29 23:12 奔跑的瓜牛 阅读(77973) 评论(1) 推荐(10) 编辑
摘要: 判断 js 类型的方式 1. typeof 可以判断出'string','number','boolean','undefined','symbol' 但判断 typeof(null) 时值为 'object'; 判断数组和对象时值均为 'object' 2. instanceof 原理是 构造函数 阅读全文
posted @ 2019-07-27 22:09 奔跑的瓜牛 阅读(154814) 评论(8) 推荐(7) 编辑
摘要:       最近一直在准备找工作,看了很多公司的招聘介绍,有相当一部分直接写:熟悉 Hybrid App 开发加分!正好,我司开发的就有这种 Hybrid App——使用 WebViewJavascriptBridge 通信,前端封装一些常 阅读全文
posted @ 2019-07-20 23:44 奔跑的瓜牛 阅读(1594) 评论(0) 推荐(0) 编辑
摘要: 盒模型 /* 红色区域的大小是多少?200 - 20*2 = 160 */ .box { width: 200px; height: 200px; padding: 20px; margin: 20px; background: red; border: 20px solid black; box- 阅读全文
posted @ 2019-07-20 14:14 奔跑的瓜牛 阅读(18889) 评论(2) 推荐(3) 编辑
摘要:       树结构大家应该都比较熟悉,这里我主要说两种:一个根节点和多个根节点。一个根节点,就像我们的html节点,不可能有和它同级的;多个根节点,比如我们的一二级导航栏。下面一个个分析: 一个根节点 初级 只能是两层树 升级 随便几层 多 阅读全文
posted @ 2019-07-07 22:03 奔跑的瓜牛 阅读(3168) 评论(0) 推荐(0) 编辑
摘要:       前端安全一直以来都是被容易忽略的知识点,因为放在前端的东西都能被用户拿到,还谈什么安全而言。也正是因为如此,我们才更应该为用户的安全考虑我认为,防止黑客窃取用户信息,从而损害用户利益。    &nb 阅读全文
posted @ 2019-06-29 17:09 奔跑的瓜牛 阅读(4237) 评论(1) 推荐(0) 编辑
摘要:       前言:(面试让介绍webpack,你可以这么答)简单地说,Webpack其最核心的功能就是 解决模板之间的依赖,把各个模块按照特定的规则和顺序组织在一起,最终合并成一个JS文件(比如bundle.js) 。这个整个过程也常常被称 阅读全文
posted @ 2019-06-02 14:06 奔跑的瓜牛 阅读(1267) 评论(0) 推荐(0) 编辑
摘要: 先来公布答案:console.log([] == ![]) // true,是不是很酷。==还有个好兄弟—— ,下面就来看看哥俩到底干了啥... == 的运行机制 ==运算符为确定两个运算数是否相等,会对左右两边运算数进行类型转换。 执行类型转换的规则 如果一个运算数是Boolean值,在检查相等性 阅读全文
posted @ 2019-05-25 19:28 奔跑的瓜牛 阅读(817) 评论(0) 推荐(0) 编辑
摘要: 图片懒加载是一个很常用的功能,特别是一些电商平台,这对性能优化至关重要。今天就用vue来实现一个图片懒加载的插件。 这篇博客采用“三步走”战略——Vue.use()、Vue.direction、Vue图片懒加载插件实现,逐步实现一个Vue的图片懒加载插件。 Vue.use() 就像开发jQuery插 阅读全文
posted @ 2019-03-10 15:50 奔跑的瓜牛 阅读(1745) 评论(0) 推荐(1) 编辑
摘要: 这里会扩展一些JS常用时间处理方法,内置时间对象的方法不再赘述 —— 传送门: 时间格式化 转换为:yyyy MM dd hh:mm:ss格式 某一天所在星期范围 // 参数:‘2019 03 05’ || 时间对象 // 结果:‘2019 03 04 至 2019 03 10’ function 阅读全文
posted @ 2019-03-07 13:13 奔跑的瓜牛 阅读(6804) 评论(0) 推荐(0) 编辑
摘要: 前后端流程分析 1. 前端页面进行登录操作,将用户名和密码发给服务器 2. 服务器进行校验,通过后生成token,包含信息有密匙、uid、过期时间等,然后返回给前端 3. 前端将token保存在本地(建议在localStorage中)和state(vuex)中,下次对服务器请求时带上,然后返回给前端 阅读全文
posted @ 2019-03-03 19:10 奔跑的瓜牛 阅读(15220) 评论(2) 推荐(1) 编辑
摘要: 功能:保存时自动按ESLint规范格式化代码 + stylus配置(需安装Manta's Stylus Supremacy插件) 阅读全文
posted @ 2019-03-02 16:50 奔跑的瓜牛 阅读(1224) 评论(0) 推荐(0) 编辑
摘要: 在学习vue移动端音乐项目时,看到一个打乱数组函数,感觉很有意思就记录一下( 意外发现: slice是个有趣的知识点) 原理:遍历数组,(let i = 0; i 阅读全文
posted @ 2019-02-23 21:19 奔跑的瓜牛 阅读(3484) 评论(0) 推荐(0) 编辑
摘要: 很多时候用$emit携带参数传出事件,并且又需要在父组件中使用自定义参数时,这时我们就无法接受到子组件传出的参数了。 找到了两种方法可以同时添加自定义参数的方法。 方法一:子组件传出单个参数时 方法二:子组件传出多个参数时 参考链接:https://github.com/vuejs/vue/issu 阅读全文
posted @ 2019-02-21 13:11 奔跑的瓜牛 阅读(4093) 评论(0) 推荐(0) 编辑