JavaScript专题系列20篇正式完结!

2017-10-25
阅读 3 分钟
9.6k
JavaScript 专题系列共计 20 篇,主要研究日常开发中一些功能点的实现,比如防抖、节流、去重、类型判断、拷贝、最值、扁平、柯里、递归、乱序、排序等,特点是研(chao)究(xi) underscore 和 jQuery 的实现方式。

JavaScript专题之解读 v8 排序源码

2017-10-19
阅读 11 分钟
8.5k
排序采用的算法跟数组的长度有关,当数组长度小于等于 10 时,采用插入排序,大于 10 的时候,采用快速排序。(当然了,这种说法并不严谨)。

JavaScript专题之乱序

2017-10-12
阅读 4 分钟
4.7k
JavaScript 专题系列第十九篇,讲解数组乱序,重点探究 Math.random() 为什么不能真正的乱序? 乱序 乱序的意思就是将数组打乱。 嗯,没有了,直接看代码吧。 Math.random 一个经常会遇见的写法是使用 Math.random(): {代码...} Math.random() - 0.5 随机得到一个正数、负数或是 0,如果是正数则降序排列,如果是负数则...

JavaScript专题之递归

2017-09-13
阅读 5 分钟
6.7k
JavaScript 专题系列第十八篇,讲解递归和尾递归 定义 程序调用自身的编程技巧称为递归(recursion)。 阶乘 以阶乘为例: {代码...} 示意图(图片来自 wwww.penjee.com): 斐波那契数列 在《JavaScript专题之函数记忆》中讲到过的斐波那契数列也使用了递归: {代码...} 递归条件 从这两个例子中,我们可以看出: 构成递归...

JavaScript专题之函数记忆

2017-09-06
阅读 4 分钟
6.5k
实现这样一个 memorize 函数很简单,原理上只用把参数和对应的结果数据存到一个对象中,调用时,判断参数对应的数据是否存在,存在就返回对应的结果数据。

JavaScript专题之函数组合

2017-09-01
阅读 8 分钟
6k
还好我们只有两个步骤,首先小写转大写,然后拼接字符串。如果有更多的操作,greet 函数里就需要更多的嵌套,类似于 fn3(fn2(fn1(fn0(x))))。

JavaScript专题之惰性函数

2017-08-22
阅读 2 分钟
7.4k
JavaScript 专题系列第十五篇,讲解惰性函数 需求 我们现在需要写一个 foo 函数,这个函数返回首次调用时的 Date 对象,注意是首次。 解决一:普通方法 {代码...} 问题有两个,一是污染了全局变量,二是每次调用 foo 的时候都需要进行一次判断。 解决二:闭包 我们很容易想到用闭包避免污染全局变量。 {代码...} 然而还...

JavaScript专题之偏函数

2017-08-16
阅读 3 分钟
13.4k
In computer science, partial application (or partial function application) refers to the process of fixing a number of arguments to a function, producing another function of smaller arity.

JavaScript专题之函数柯里化

2017-08-11
阅读 7 分钟
8.4k
In mathematics and computer science, currying is the technique of translating the evaluation of a function that takes multiple arguments (or a tuple of arguments) into evaluating a sequence of functions, each with a single argument.

JavaScript专题之如何判断两个对象相等

2017-08-09
阅读 10 分钟
16.5k
虽然标题写的是如何判断两个对象相等,但本篇我们不仅仅判断两个对象相等,实际上,我们要做到的是如何判断两个参数相等,而这必然会涉及到多种类型的判断。

JavaScript专题之jQuery通用遍历方法each的实现

2017-08-03
阅读 4 分钟
5.5k
JavaScript 专题系列第十一篇,讲解 jQuery 通用遍历方法 each 的实现 each介绍 jQuery 的 each 方法,作为一个通用遍历方法,可用于遍历对象和数组。 语法为: {代码...} 回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容。 {代码...} {代码...} 退出循环 尽管 ES5 提供了 forEach 方法...

JavaScript专题之学underscore在数组中查找指定元素

2017-07-26
阅读 6 分钟
6k
JavaScript专题系列第十篇,讲解如何从数组中查找指定元素,并且跟着 undersocre 实现 findIndex 和 findLastIndex、sortedIndex、indexOf 和 lastIndexOf

JavaScript专题之数组扁平化

2017-07-21
阅读 4 分钟
6.7k
JavaScript 专题系列第九篇,讲解如何实现数组的扁平化,并解析 underscore 的 _.flatten 源码 扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下: {代码...} 知道了效果是什么样的了,我们可...

JavaScript专题之如何求数组的最大值和最小值

2017-07-19
阅读 2 分钟
8.4k
JavaScritpt 专题系列第八篇,讲解多种方式求数组的最大值和最小值 前言 取出数组中的最大值或者最小值是开发中常见的需求,但你能想出几种方法来实现这个需求呢? Math.max JavaScript 提供了 Math.max 函数返回一组数中的最大值,用法是: {代码...} 值得注意的是: 如果有任一参数不能被转换为数值,则结果为 NaN。 m...

JavaScript专题之从零实现jQuery的extend

2017-07-14
阅读 7 分钟
6.3k
jQuery 的 extend 是 jQuery 中应用非常多的一个函数,今天我们一边看 jQuery 的 extend 的特性,一边实现一个 extend!

JavaScript专题之深浅拷贝

2017-07-12
阅读 3 分钟
6.6k
JavaScript 专题系列第六篇,讲解深浅拷贝的技巧和以及实现深浅拷贝的思路 前言 拷贝也是面试经典呐! 数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice、concat 返回一个新数组的特性来实现拷贝。 比如: {代码...} 用 slice 可以这样做: {代码...} 但是如果数组嵌套了对象或者数组的话,比如: {代码...

JavaScript专题之类型判断(下)

2017-07-05
阅读 5 分钟
6.3k
JavaScript专题系列第五篇,讲解更加复杂的类型判断,比如 plainObject、空对象、类数组对象、Window对象、DOM 元素等

JavaScript专题之类型判断(上)

2017-06-27
阅读 5 分钟
5.5k
类型判断在 web 开发中有非常广泛的应用,简单的有判断数字还是字符串,进阶一点的有判断数组还是对象,再进阶一点的有判断日期、正则、错误类型,再再进阶一点还有比如判断 plainObject、空对象、Window 对象等等。

JavaScript专题之数组去重

2017-06-21
阅读 7 分钟
6.5k
在这个方法中,我们使用循环嵌套,最外层循环 array,里面循环 res,如果 array[i] 的值跟 res[j] 的值相等,就跳出循环,如果都不等于,说明元素是唯一的,这时候 j 的值就会等于 res 的长度,根据这个特点进行判断,将值添加进 res。

JavaScript专题之跟着 underscore 学节流

2017-06-19
阅读 5 分钟
8.6k
JavaScript 专题系列第二篇,讲解节流,带你从零实现一个 underscore 的 throttle 函数 前言 在《JavaScript专题之跟着underscore学防抖》中,我们了解了为什么要限制事件的频繁触发,以及如何做限制: debounce 防抖 throttle 节流 今天重点讲讲节流的实现。 节流 节流的原理很简单: 如果你持续触发事件,每隔一段时间...

JavaScript专题之跟着underscore学防抖

2017-06-02
阅读 6 分钟
8.1k
JavaScript 专题系列第一篇,讲解防抖,带你从零实现一个 underscore 的 debounce 函数 前言 在前端开发中会遇到一些频繁的事件触发,比如: window 的 resize、scroll mousedown、mousemove keyup、keydown…… 为此,我们举个示例代码来了解事件如何频繁的触发: 我们写个 index.html 文件: {代码...} debounce.js 文件...