JS函数无限柯里化
不用箭头函数的实现
网上看到很多用箭头函数的版本,在看不懂的时候非常的眼花。
所以在这里我选择先用纯粹的function配合arguments分析完原理,再过渡到轻量级的箭头函数。下面给出最原始的实现:
123456789function curry(f, ...savedArgs) { return function() { const totalArgs ...
WebSocket简单应用
简介
如果想要实现实时与服务器连接,一个简单的方法如下:
123setInterval(() => { ajax()}, 5000)
通过这种方式可以达到不断刷新的目的,但是它存在着诸多弊端:
如果没有新的内容的话,反复请求同一内容浪费流量。
如果有新的内容,用户无法第一时间得到,需要等待下一次定时器被调用。
所有出现了WebSocket这种技术,它可以实现服务 ...
用Proxy写几个Demo
背景
本文是根据阮一峰大大的文章写几个小Demo,这里的代码都是我自己看了一遍需求敲出来的,不存在直接复制黏贴的情况,请放心。
数组负数索引
众多语言都支持数组的索引为负数,就像这段Python代码一样:
123arr = [1, 2, 3]print(arr[-1])## 3
我们可以通过Proxy让JS也支持这一操作:
1234567891011121314151617181920212223 ...
学习基础Proxy
背景
本文是我先学习MDN之后写下的,但是实现功能的代码都是我自己根据学习所得知识写出来的,不会照搬。
Proxy 是 ES6 为我们新增的对象,和它的名字一样,它起到一个代理作用,可以拦截对对象的操作,比如获取数据,设置属性等。
Proxy
下面是从MDN摘过来的,但是释义是我自己写的:
1const p = new Proxy(target, handler)
target
被Prox ...
在JS中愉快地使用枚举
背景
在JS中并没有原生枚举的实现,可以通过下面几种方法来模拟类似的操作。
直接使用字符串
上代码:
12345678910111213function isWeekend(day) { return day === 'Sat' || day === 'Sun'}console.log(isWeekend('Sun ...
关于JS执行顺序
背景
众所周知,JS是单线程语言,但它支持异步操作,其核心机制就是JS引擎的事件循环。
先上一段代码:
12345678910111213141516console.log(1)setTimeout(() => { console.log(2)})new Promise(resolve => { console.log(3) resolv ...
JS迭代器和生成器
背景
遍历数组的时候,我相信大多数人已经用上ES6的for...of语法了:
123456const arr = [1, 2, 3]for (const item of arr) { console.log(item)}// 1 2 3
那么我们能不能让自己创建的对象也支持for...of呢? 答案自然是可以的,这么好用的语法不给一个自定义支持简直天理难容。
引入
在Py ...
TS中keyof和typeof
这两个东西是用来进行类型推断的。
在JS中,如果想要动态访问属性,很容易写出下面的代码:
123function getProp(obj, key) { return obj[key]}
但是TS呢? 如果使用any大法,就写出下面这样的代码了:
123function getProp(obj: any, key: string) { return obj ...
JS统计中英文字数
源码
来自半年后的说明:我把代码转放到 gists 里了,当时代码风格受 Python 影响较大,这里就不再更改了,毕竟大家本地都有自己的格式化工具。
点击这里前往Github获取本文源码。
需求
众所周知,英文里的字数是单词数,而中文的字数就是字的个数。
那么我的第一想法自然是分开统计,之后汇总。
方案
匹配中文字符的正则是[\u4e00-\u9fa5],因此写出下列代码:
12345678 ...
Nginx处理静态资源缓存问题
配置
说来简单,就是在Nginx里面这样写:
1234location / { add_header Cache-Control no-cache; # 其它的配置}
这里的no-cache和no-store呈现效果相似,区别在下面。
no-cache
no-cache,被称为协商缓存,也就是会查一下服务器的资源和缓存资源是否相同,如果是就用缓存,不是就会重新获取。 ...