深入分析Javascript中的this

function showThis(){ console.log(this); } var o = { showThis: showThis } showThis(); // global o.showThis(); // o 这段代码想必大家都耳熟能详了,这里我尝试换个方式来理解一下js中的this关键字。 普通函数的 this 值由“调用它所使用的引用”决定,其中奥秘就在于:我们获取函数的表达式,它实际上返回的并非函数本身,而是一个 Reference 类型(记得我们在类型一章讲过七种标准类型吗,正是其中之一)。Reference 类型由两部分组成:一个对象和一个属性值。不难理解

  • Aaron Thunder
    Aaron Thunder
5 min read

js事件循环系统走马观花——Tasks, microtasks, queues and schedules

Event Loop 是js异步特性的基石,前端同学一定都耳熟能详。但是当我们把这些微操放在一起的时候,会是什么效果?你真的理解js这门语言异步的真谛么?先来个开胃菜: console.log('script start'); setTimeout(function() { console.log('setTimeout'); }, 0); Promise.resolve().then(function() { console.log('promise1'); }).then(function() { console.log('promise2'); }); console.log('script

  • Aaron Thunder
    Aaron Thunder
5 min read

MySql 数据库中文编码错误

最近在用Mysql做后台时,数据存储返回如下错误: Error 1366: Incorrect string value: '\xA0\xF1\x34\x80\x0A0…' for column 'XXX' at row 1 在排除了上层框架原因后,发现是在写MySql过程中,string中包含中文字符的原因,这里简单记录下fix过程,仅供参考。 查看当前mysql状态 status 或者 \s 查看当前数据库的编码方式: 假设 Db characterset的编码方式为latin1,

  • Aaron Thunder
    Aaron Thunder
2 min read
小犁租牌

沪牌免费代拍,了解一下?

免费代拍是由小犁飞刀独创的代拍+托管的一站式沪牌额度管理解决方案。 免费代拍与我们的收费代拍使用的是同一套软件、策略和拍手,因此整体中标率方面不存在差异,并不会因为豁免了代拍费而区别对待。根据历史数据,通常在一张标书(6次)左右可以拍中,但必须说明由于拍牌存在一定运气成分,因此实际几次拍中每位客户不尽相同,这点请事先知晓。

  • Aaron Thunder
    Aaron Thunder
4 min read
小犁租牌

小犁租沪牌,安全又省心

小犁租沪牌 作为沪上知名的在线车务机构,一直以来小犁飞刀的租牌服务深受广大朋友们的欢迎。但另一方面,也有一些朋友对租牌不甚了解,所以也难免会抱有这样那样的疑问,因此小编就借此机会,向诸位做个集中说明。 一、出租沪牌是什么? 由于沪牌额度无法流转,因此租牌需要承租方将车辆过户到您名下,由您代为持有,而承租方作为车辆实际使用人,定期向您支付租金。 二、出租沪牌有风险吗? 在操作规范的前提下,租牌没有任何风险。有朋友对发生事故时的“连带责任”存在一定担忧,事实上这样的担心是多余的,现行法律并不支持车辆租赁过程中所谓“连带责任”的提法。为此我们还特别邀请到将沪牌出租给我们两年之久,同时拥有十余年执业经验的刘律师,专门就此撰文做了说明:关于出租牌照连带责任的释疑 三、还有什么风控措施吗? 为确保您的合法权益万无一失,

  • Aaron Thunder
    Aaron Thunder
3 min read

【前端基础】基本款之Promise手动实现

前端基础入门,手动实现一个Promise的polyfill。 好久没写blog,最近组里及其缺人,每天都不少来面试的,但大部分就是来走个过场。我深深感觉到前端开发人员的市场现状就是这样:从业人员数量庞大,但真正能做到基础入门的却并不多。所以,公司招不到人,前端开发找不到工作。 像Promise的原理就是前端入门的基本款知识点,基础中的基础了,如果这都不理解,说什么三年工作经验,五年工作经验的,扯淡,你那是一年工作经验用了五年。 遗憾的是,这知识点大多数面试者完成度并不高,实际现场实现的过程中,面试官并不是让你实现完整的Promise规范,也不可能,只需要完成基本的链式调用,然后思路能讲清楚就足够了。 先开个帖子立个flag,有空的时候补充一些稍微详细点的知识点和注意事项。 // 调用方式 const promise = new Promise(

  • Aaron Thunder
    Aaron Thunder
2 min read
code

tcpdump 简介以作备忘

在深入理解计算机网络协议的过程中,一个趁手的工具少不了,很多人喜欢Wireshark,可视化界面做的比较好。然鹅,本人更加偏爱强大的tcpdump,不仅是因为其强大的功能,而且在实际应用场景中,我们不可能把所有的电脑都装好wireshark,然后再debug定位问题。 如果用macOS的话,内置的tcpdump命令十分方便快捷,当然,前提是你得记得住常用的命令。 这里重新捋一下tcpdump的使命及其基本使用方法,以作备忘。 常用Options -i any : Listen on all interfaces just to see if you’re seeing any traffic. -i

  • Aaron Thunder
    Aaron Thunder
4 min read
code

从零制作一个Node.js的Promise

Step 1 首先,什么是Promise? 在ES6 spec定义里面,Promise是一个类,其constructor接收一个executor函数。其实例都会有then方法。当然,在spec里面,Promises还有更详细的其他的属性,这里为了简单起见,暂且忽略不表。 首先,一个比较简陋的实现: class iPromise { constructor(executor) { } then(onFulfilled, onRejected) {} } Step 2 其次,Promise是一个有三种状态的状态机: pending: 初始状态,promises任务结果尚未确定 fulfilled: 任务成功,并产生了相关数据结果

  • Aaron Thunder
    Aaron Thunder
3 min read
code

modules in Node.js

模块机制是node js中很重要的一个基本概念。 在node js的模块系统中,每个文件都是一个独立的模块。 比如说在文件circle.js中: // circle.js const { PI } = Math; exports.area = (r) => PI * r ** 2; exports.circumference = (r) => 2 * PI * r; 其中exports是一个全局的对象,任何附加到exports上的属性都将被添加到该模块的根路径下。 在该模块中定义的变量被wrap在模块内部,比如这里定义的PI。 require.resolve() 当require一个文件时,

  • Aaron Thunder
    Aaron Thunder
3 min read
code

搬砖日常之——如何让git忽略文件权限更改?

当把别人的源代码pull到本地之后,我们可能会安装依赖,更改owner用户,然后将源代码或者编译输出的文件根据情况做一些权限变更。 在一顿操作猛如虎之后,你会发现,git将所有更改过权限的文件都标记了。 是不是一头雾水,一脸懵逼,脑瓜子嗡嗡地? 如果你胆子大的话,可以尝试一下直接commit上去,可能等会儿就会有不少人举着椅子来找你聊天了。 不挨打的办法很简单: git config core.fileMode false 这样git将会忽略文件权限的改动咯,又可以开心地在dev环境玩耍了。 作为一个好奇心重的搬砖工,这肯定满足不了我的求知欲啊,首先看一下文档是这么说的: core.fileMode Tells Git if the executable bit of

  • Aaron Thunder
    Aaron Thunder
3 min read
code

生产环境下用nginx为Nodejs server减压

生产环境下,nodejs server随时需要应对访问量的突然变化,以及各种网络攻击,特别是如果你的网站需要服务端渲染,哪怕前端已经部署了cdn、slb,高达百倍的输出输入比,都会让你的服务器被陡增的访问量轻松击溃。 面对如此恶略的网络环境,有什么办法能够让nodejs server更加健壮呢?方法当然有很多,这里我先介绍一款必备的基本款,包您满意。 本文关注的主要问题是如何有效降低nodejs server的访问流量,也就是尽量把流量拦截在抵达nodejs server之前。让nodejs server更少地直接暴露给充满恶意的网络世界。 架构是在nodejs进程(express)之前加一层nginx。这里nginx可以处理绝大多数脏活儿累活儿:文件压缩、serve静态文件、caching、SSL(可选,根据架构)、负载均衡以及其他让客户端开心的事儿。这样就可以避免对nodejs进程不必要的访问,

  • Aaron Thunder
    Aaron Thunder
4 min read

document.body.scrollTop VS document.documentElement.scrollTop

前几天对网站结构做了些优化和小的局部重构,之后发现前端页面行为异常,涉及到页面滚动和元素偏移的行为都挂掉了。调试发现,涉及到document.body.scrollTop的逻辑都失效了。 document.body or document.documentElement? 结论如下: chrome在浏览器标准模式下,并不支持documeng.body.scrollTop。 有关于document.body.scrollTop的历史问题可以参考dom-element-scrolltop。 IE和FireFox实现了标准的document.documentElement,具体spec在这里dom-document-scrollingelement。 摘录一下: Spec of The scrollTop attribute on getting, must return

  • Aaron Thunder
    Aaron Thunder
2 min read