JavaScript专题之乱序

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

JavaScript专题之递归

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

JavaScript专题之函数记忆

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

JavaScript专题之函数组合

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

JavaScript专题之惰性函数

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

JavaScript专题之偏函数

2017-08-16
阅读 3 分钟
13.6k
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.6k
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.9k
虽然标题写的是如何判断两个对象相等,但本篇我们不仅仅判断两个对象相等,实际上,我们要做到的是如何判断两个参数相等,而这必然会涉及到多种类型的判断。

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

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

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

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

JavaScript专题之数组扁平化

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

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

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

JavaScript专题之从零实现jQuery的extend

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

JavaScript专题之深浅拷贝

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

JavaScript专题之类型判断(下)

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

JavaScript专题之类型判断(上)

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

JavaScript专题之数组去重

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

JavaScript专题之跟着 underscore 学节流

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

JavaScript专题之跟着underscore学防抖

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

JavaScript深入系列15篇正式完结!

2017-05-26
阅读 2 分钟
26.1k
JavaScript 深入系列共计 15 篇已经正式完结,这是一个旨在帮助大家,其实也是帮助自己捋顺 JavaScript 底层知识的系列。重点讲解了如原型、作用域、执行上下文、变量对象、this、闭包、按值传递、call、apply、bind、new、继承等 JS 语言中的比较难懂的概念。

JavaScript深入之继承的多种方式和优缺点

2017-05-12
阅读 5 分钟
7.4k
JavaScript深入系列第十五篇,讲解JavaScript各种继承方式和优缺点。 写在前面 本文讲解JavaScript各种继承方式和优缺点。 但是注意: 这篇文章更像是笔记,哎,再让我感叹一句:《JavaScript高级程序设计》写得真是太好了! 1.原型链继承 {代码...} 问题: 1.引用类型的属性被所有实例共享,举个例子: {代码...} 2.在...

JavaScript深入之创建对象的多种方式以及优缺点

2017-05-10
阅读 5 分钟
12.4k
JavaScript深入系列第十四篇,讲解创建对象的各种方式,以及优缺点。 写在前面 这篇文章讲解创建对象的各种方式,以及优缺点。 但是注意: 这篇文章更像是笔记,因为《JavaScript高级程序设计》写得真是太好了! 1. 工厂模式 {代码...} 缺点:对象无法识别,因为所有的实例都指向一个原型 2. 构造函数模式 {代码...} 优...

JavaScript深入之类数组对象与arguments

2017-05-08
阅读 4 分钟
7.3k
JavaScript深入系列第十三篇,讲解类数组对象与对象的相似与差异以及arguments的注意要点 类数组对象 所谓的类数组对象: 拥有一个 length 属性和若干索引属性的对象 举个例子: {代码...} 即便如此,为什么叫做类数组对象呢? 那让我们从读写、获取长度、遍历三个方面看看这两个对象。 读写 {代码...} 长度 {代码...} 遍...

JavaScript深入之new的模拟实现

2017-05-04
阅读 4 分钟
10.6k
JavaScript深入系列第十二篇,通过new的模拟实现,带大家揭开使用new获得构造函数实例的真相 new 一句话介绍 new: new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一 也许有点难懂,我们在模拟 new 之前,先看看 new 实现了哪些功能。 举个例子: {代码...} 从这个例子中,我们可以看到,实...

JavaScript深入之bind的模拟实现

2017-05-03
阅读 5 分钟
8.7k
bind() 方法会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。(来自于 MDN )

JavaScript深入之call和apply的模拟实现

2017-05-02
阅读 4 分钟
14.3k
JavaScript深入系列第十篇,通过call和apply的模拟实现,带你揭开call和apply改变this的真相 call 一句话介绍 call: call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。 举个例子: {代码...} 注意两点: call 改变了 this 的指向,指向到 foo bar 函数执行了 模拟实现第一步 那么...

JavaScript深入之参数按值传递

2017-04-28
阅读 2 分钟
4.7k
JavaScript深入系列第九篇,除了按值传递、引用传递,还有第三种传递方式 —— 按共享传递 定义 在《JavaScript高级程序设计》第三版 4.1.3,讲到传递参数: ECMAScript中所有函数的参数都是按值传递的。 什么是按值传递呢? 也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。 按...

JavaScript深入之闭包

2017-04-27
阅读 4 分钟
6.8k
JavaScript深入系列第八篇,介绍理论上的闭包和实践上的闭包,以及从作用域链的角度解析经典的闭包题。 定义 MDN 对闭包的定义为: 闭包是指那些能够访问自由变量的函数。 那什么是自由变量呢? 自由变量是指在函数中使用的,但既不是函数参数也不是函数的局部变量的变量。 由此,我们可以看出闭包共有两部分组成: 闭包...

JavaScript深入之执行上下文

2017-04-14
阅读 3 分钟
5.9k
JavaScript深入系列第七篇,结合之前所讲的四篇文章,以权威指南的demo为例,具体讲解当函数执行的时候,执行上下文栈、变量对象、作用域链是如何变化的。

JavaScript深入之从ECMAScript规范解读this

2017-04-13
阅读 8 分钟
6.9k
在《JavaScript深入之执行上下文栈》中讲到,当JavaScript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。