ES6之Temporal Dead Zone

在使用ES6时,一般都是推荐使用let, const来定义变量,相对var而言:

Hoisting Scope Creates global properties
var Declaration Function Yes
let Temporal dead zone Block No
const Temporal dead zone Block No

Temporal dead zone这个与varDeclaration有什么不一样的地方?

阅读更多

Socket.io问题分析

广播数据

如何向所有的客户端广播数据?

  1. 使用io.sockets.emit
1
2
3
4
5
6
7
...

var io = require('socket.io')(server);
io.on('connection', function(socket){
io.sockets.emit('new', {hello: 'world'});
});

  1. 使用socket.broadcast.emit
1
2
3
4
5
6
7
...

var io = require('socket.io')(server);
io.on('connection', function(socket){
socket.broadcast.emit('new', {hello: 'world'});
});

两种方式区别io.sockets.emit向所有连接的客户端广播数据,而socket.broadcast.emit则向
除了该socket自身之外的其他所有广播数据。其实也就是说
io.sockets.emit = socket.broadcast.emit + socket.emit

因此可以猜测出socket.io内部会保留所有连接的socket。

nodejs mongodb

记录一下nodejs配置mongodb的过程:

  1. mac上安装mongodb:

    1
    brew install mongodb
  2. 创建一个存在数据目录

    1
    mkdir -p ~/data/db
  3. 在用户根目录运行mongodb,指定数据存在路径为刚刚新建的目录

    1
    mongod --dbpath=./data/db

    阅读更多

网页代理

前端开发时,经常需要用代理工具Charles或者Fiddler来抓包,或修改接口或替换文件或查看提交数据等,都是非常方便。尤其是做移动端开发时,是不是经常得配置host,或者查看页面请求的数据是否正确,相信我,此时使用Charles的远程代理是一件很幸福的事情。

当我们打开浏览器请求一个页面时候,为什么Charles就能捕获到请求?然而如果chrome使用了SwitchyOmega(配合shadowsocks,翻墙神器)或者类似的代理插件,此时Charles时捕获不到我们发的请求。

阅读更多

nodejs使用shebang

基本含义

shebang也可以称之为hashbang, 代指#!。一般出现在脚本的第一行,用于在unix系统或类unix系统中指定默认的脚本文件的解释程序。
其语法格式是:

#!interpreter [optional-arg] // 解释程序的绝对路径和可选参数

  1. 如果脚本文件中没有#!这一行,执行时会以系统默认的解释程序允许
  2. 如果#!之后的解释程序是一个可执行文件,那么执行这个脚本时,它就会把文件名及其参数一起作为参数传给那个解释程序去执行。

阅读更多