2016 年(共 15 篇文章)

这一年从图书馆借阅书籍 62 本,基本都是技术相关的吧,部分因为印象不深或价值不高就不列出来了,所以以下仅包含留有较深印象的书籍,按阅读时间排序。

首先,让我们来回顾一下,JavaScript 中作用域的概念。作用域是一个变量及函数能够被正常访问的范围,在此范围之外就无法进行访问。

与其它一些语言不同, ES6 之前 JavaScript 的作用域只分为全局作用域和函数作用域两种,并不包含块级作用域。如下的代码会造成一些问题:

function loop() {for (var i = 0; i < 10; i++) {
        // Do some thing...
    }
    console.log(i);
    // 输出:10
}

loop();

这段代码中,我们的本意是让循环变量 i 仅在循环中可访问,但由于在 JavaScript 中不具有块状作用域,因此实际上在运行时变量 i 拥有函数作用域,在整个函数内都可访问。

然而,JavaScript 中与作用域相关的原理并没有那么简单, 下面让我们来深入了解一下。

JavaScript 是一门面向对象(Object-Oriented, OO)的语言,但是它的面向对象机制与其它的 OO 语言(如 C++、Java 等)有很大的区别,其中最大的不同点就是 JavaScript 不存在类的概念。在其它 OO 语言中,类是实现对象的基础,每一个对象都是通过类来创建的,可以说,如果没有类就没有对象。然而 JavaScript 底层就没有类的概念,那么它的面向对象机制是如何实现的呢?

原型模式是实现面向对象机制的一种方法,完全不需要使用到类的概念,每一个对象都是由另外一个对象作为其原型,并通过委托等方式来实现面向对象的那些核心概念。JavaScript 就是这样通过原型来实现面向对象机制的。

原文 https://medium.com/@tosho.trajanov/front-end-developers-are-software-engineers-too-3641375ffe50#.dre250ty9

在网上,我经常能够看到有人提问,为什么前端开发者做的工作比后端简单许多,而需求量却越来越大?我只能说,这完全不是像他们想象的那么简单。前端开发者如此受欢迎是因为他们与后端开发者一样,同样是工程师,他们做的工作同样很复杂。下面从很多不同的方面说明了这一点。

Node.js 中的很多核心模块,都是基于事件来实现的。一些对象通过触发一些事件,使得相应的监听器函数能够被调用执行。所有能够触发事件的对象都是 EventEmitter 类的实例。这些对象可以通过 eventEmitter.on() 方法,将多个函数附加到由这个对象触发的对应命名事件中。当 EventEmitter 对象触发一个事件时,所有附着在那个事件上的函数都会被同步调用。

下面的例子展示了一个简单的 EventEmitter 实例,其中包含一个单独的监听器。eventEmitter.on() 方法用来注册监听器, eventEmitter.emit() 方法用来触发相应的事件。

一般不会直接使用 EventEmitter 作为构造实例的对象,而是会通过继承来自定义一个 EventEmitter,使用方式如下:

const EventEmitter = require('events');

class MyEmitter extends EventEmitter {}

const myEmitter = new MyEmitter();
myEmitter.on('event', () => {
  console.log('an event occurred!');
});
myEmitter.emit('event');

// 允许对同一事件添加多个监听器函数,
// 也允许通过事件来传递多个参数:
myEmitter.on('event', (a, b, c) => {
    // Something
})
myEmitter.emit('event', 'a', 'b', 'c');
Copyright © 2017 dremy.cn
皖ICP备16015002号