浏览器与 Node.js 的事件循环(Event Loop)有何区别?[转]

前言

本文我们将会介绍 JavaScript 实现异步的原理,并且了解了在浏览器和 Node.js 中 Event Loop 其实是不相同的。

一、线程与进程

1. 概念

我们经常说 JavaScript 是单线程执行的,指的是一个进程里只有一个主线程,那到底什么是线程?什么是进程?

官方的说法是:进程是 CPU 资源分配的最小单位;线程是 CPU 调度的最小单位。这两句话并不好理解,我们先来看张图。

  • 进程好比图中的工厂,有单独的专属自己的工厂资源。
  • 线程好比图中的工人,多个工人在一个工厂中协作工作,工厂与工人是 1:n 的关系。也就是说一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。
  • 工厂的空间是工人们共享的,这象征一个进程的内存空间是共享的,每个线程都可用这些共享内存。
  • 多个工厂之间独立存在。

"浏览器与 Node.js 的事件循环(Event Loop)有何区别?[转]"继续阅读

如何在 JS 代码中消灭 for 循环[转]

Edit: 在我入职第三家公司的第一天,看到代码库里面一堆的 for 循环,内心有些崩溃,于是做了一次技术分享,展示怎样在代码中避免 for 循环。这篇文章是那次分享的总结。本文并不完美,其中递归的部分其实不应该在生产环境中用的。之所以写出来了,主要是受这篇文章影响 Rethinking JavaScript: Death of the For Loop 我这篇文章重点其实应该是怎样用 reduce 和其它高阶函数,至于这些高阶函数底层用的是 while 循环还是 for 循环,都不重要,我们可以不在乎这些细节。在实际写代码的时候,只要被允许,我都会尽量使用 Ramda。

一、用好 filter,map,和其它 ES6 新增的高阶遍历函数

问题一:

将数组中的 falsy 值去除

const arrContainsEmptyVal = [3, 4, 5, 2, 3, undefined, null, 0, ""];

答案:

const compact = arr => arr.filter(Boolean);

"如何在 JS 代码中消灭 for 循环[转]"继续阅读

读书笔记:《你不知道的JavaScript(上卷)》 - [美]Kyle Simpson 著 / 赵望野 梁杰 译

this 部分讲的很全面!

出版时间:2015 年 8 月

章节:1.1 编译原理

在传统编译语言的流程中,程序中的一段源代码在执行之前会经历三个步骤,统称为“编译”。

  1. 分词/词法分析(Tokenizing / Lexing)
  2. 解析/语法分析(Parsing)
  3. 代码生成

"读书笔记:《你不知道的JavaScript(上卷)》 - [美]Kyle Simpson 著 / 赵望野 梁杰 译"继续阅读

节流和去抖的简单实现

一、节流

高频率的函数执行会给浏览器和服务器太大压力,设置一个间隔时间可以优化执行频率,记录上一次(初始)函数执行的时间,与此次执行时间比较;如果这个差值在设置的间隔时间内则定时执行,否则立即执行;如果在这个间隔时间内反复触发函数则无视。

"节流和去抖的简单实现"继续阅读