不同浏览器与不同字体,默认 line-height 的表现差异

今天在计算文字填充元素高度遇到一个有意思的东西,所以分享出来,首先有如下代码片段:

本以为li的高度会是 32px ,结果在 Firefox 中的高度却是 35px 。再仔细一看,原本以为 12px 的字体高度,结果却是 15px:

查看全文

定时器(interval)与延时器(timeout)

定时器与延时器提供了一种让一段代码在一定毫秒之后,再异步执行的能力。由于 JavaScript 单线程的特性,定时器与延时器提供了一种跳出这种限制的方法,以一种不太直观的方式来执行代码。

有一个需要理解的重要概念,就是 JavaScript 中定时器与延时器的执行时间是不能保证的,原因就是因为 JavaScript 是单线程的。JavaScript 在同一时间只能执行一个代码块,这些代码块的执行就阻塞了异步事件的处理。这意味着,当一个异步事件发生时(如鼠标单击,ajax 回调事件),它就会排队,并且在线程空闲时才进行执行。

很容易验证浏览器对定时器或延时器的阻塞,使用alert()即可,代码很简单:

查看全文

利用参数个数以及闭包进行函数重载

基于传入的参数,有很多种方法可以判断并进行函数重载。一种通用的方法是,根据传入参数的类型执行不同的操作;另一种方法是,可以通过判断某些特定的参数是否存在来执行不同的操作;还有一种方法是判断传入参数的个数来执行不同的操作。本文介绍的就是最后一种方法。

对于一个函数,在参数方面,我们可以确定两件事情:

  • 通过函数的length属性,可以知道声明了多少命名参数(形参个数)
  • 通过arguments.length,可以知道在调用时传入了多少参数(实参个数)

查看全文

在 WebStorm 中结合 Eslint 规范代码

JavaScript 的代码检查工具有:JSLint,JSHint, JSCS, ESLint,本文着重介绍 ESLint。

ESLint 在一系列的代码质量检查工具中,是最年轻的一个,当然也是最现代化的。配置多样,支持 JavaScript, JSON 以及 YAML 格式的 .eslintrc.*文件,同时也支持在package.jsoneslintConfig字段配置(Configuration File Formats)。

安装

ESLint 基于 Node 平台,所以 Nodejs 是必须安装的,然后通过 npm 安装 ESLint 包,至于全局安装还是作为开发依赖安装,取决于个人。

然后在 WebStorm 中,打开设置(File>Setting或者Alt+F7),按路径进入 ESLint 的配置界面(Languages&Frameworks>JavaScript>Code Quality Tools>ESLint)。开启 ESLint,并配置相应路径,配置文件默认使用.eslintrc

查看全文

函数的四种调用方式

一共有四个不同的方式可以进行函数调用,每种方式都有自己的细微差别。

  • 作为一个函数进行调用,是最简单的形式
  • 作为一个方法在对象上进行调用,支持面向对象编程
  • 作为构造器进行调用,创建一个新对象
  • 通过apply()call()方法进行调用

除了最后一种方式,其他方法的函数的调用,都是通过在表达式后面加上小括号来执行函数引用。如果给函数传递参数,则需要将参数放在小括号里并以逗号分隔:expression(arg1,arg2)

查看全文

MongoDB 副本集的单服务器实现

生产环境中的单服务器副本集意义不大,所以本文仅供学习使用。

多台服务器可以使用主机名区分不同的副本集成员,但单服务器只能使用端口号进行区分,本文将实现一包含三个 mongod 服务器的副本集 。

说明:文中,我将使用 Cmder 命令行辅助工具,它集成了git bash 与大部分 linux 命令,并支持 Tab 补全,可以打开多个标签页面,会极大的方便我们的操作。

因涉及的参数较多,所以我建议使用配置文件的方式启动 mongod,并且每个 mongod 实例都需要不同的端口,数据库,与日志文件。假设我们的副本集名称是“rs0”,目录结构与其中的一个配置如下:

查看全文