摘要: 前言 在《JavaScript专题之跟着underscore学防抖》中,我们了解了为什么要限制事件的频繁触发,以及如何做限制: 今天重点讲讲节流的实现。 节流 节流的原理很简单: 如果你持续触发事件,每隔一段时间,只执行一次事件。 根据首次是否执行以及结束后是否执行,效果有所不同,实现的方式也有所不 阅读全文
posted @ 2017-10-31 16:37 qiaoyang_z 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 前言 在前端开发中会遇到一些频繁的事件触发,比如: 为此,我们举个示例代码来了解事件如何频繁的触发: 我们写个 index.html 文件: <!DOCTYPE html> <html lang="zh-cmn-Hans"> <head> <meta charset="utf-8"> <meta h 阅读全文
posted @ 2017-10-31 16:36 qiaoyang_z 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 写在前面 本文讲解JavaScript各种继承方式和优缺点。 但是注意: 这篇文章更像是笔记,哎,再让我感叹一句:《JavaScript高级程序设计》写得真是太好了! 1.原型链继承 function Parent () { this.name = 'kevin'; } Parent.prototy 阅读全文
posted @ 2017-10-31 16:32 qiaoyang_z 阅读(2403) 评论(1) 推荐(1) 编辑
摘要: 写在前面 这篇文章讲解创建对象的各种方式,以及优缺点。 但是注意: 这篇文章更像是笔记,因为《JavaScript高级程序设计》写得真是太好了! 1. 工厂模式 function createPerson(name) { var o = new Object(); o.name = name; o. 阅读全文
posted @ 2017-10-31 16:31 qiaoyang_z 阅读(956) 评论(0) 推荐(0) 编辑
摘要: 类数组对象 所谓的类数组对象: 拥有一个 length 属性和若干索引属性的对象 举个例子: var array = ['name', 'age', 'sex']; var arrayLike = { 0: 'name', 1: 'age', 2: 'sex', length: 3 } 即便如此,为 阅读全文
posted @ 2017-10-31 16:30 qiaoyang_z 阅读(222) 评论(0) 推荐(0) 编辑
摘要: bind 一句话介绍 bind: bind() 方法会创建一个新函数。当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数。(来自于 MDN ) 由此我们可以首先得出 bind 函数的两个特点: 返回函数的模拟实现 从第一个特 阅读全文
posted @ 2017-10-31 16:29 qiaoyang_z 阅读(329) 评论(0) 推荐(0) 编辑
摘要: new 一句话介绍 new: new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一 也许有点难懂,我们在模拟 new 之前,先看看 new 实现了哪些功能。 举个例子: // Otaku 御宅族,简称宅 function Otaku (name, age) { this.n 阅读全文
posted @ 2017-10-31 16:29 qiaoyang_z 阅读(236) 评论(0) 推荐(0) 编辑
摘要: call 一句话介绍 call: call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法。 举个例子: var foo = { value: 1 }; function bar() { console.log(this.value); } bar.call(f 阅读全文
posted @ 2017-10-31 16:28 qiaoyang_z 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 定义 在《JavaScript高级程序设计》第三版 4.1.3,讲到传递参数: ECMAScript中所有函数的参数都是按值传递的。 什么是按值传递呢? 也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。 按值传递 举个简单的例子: var value = 1; 阅读全文
posted @ 2017-10-31 16:27 qiaoyang_z 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 定义 MDN 对闭包的定义为: 闭包是指那些能够访问自由变量的函数。 那什么是自由变量呢? 自由变量是指在函数中使用的,但既不是函数参数也不是函数的局部变量的变量。 由此,我们可以看出闭包共有两部分组成: 闭包 = 函数 + 函数能够访问的自由变量 举个例子: var a = 1; function 阅读全文
posted @ 2017-10-31 16:26 qiaoyang_z 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 在《JavaScript深入之执行上下文栈》中讲到,当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。 对于每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用域链 阅读全文
posted @ 2017-10-31 16:25 qiaoyang_z 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 在《JavaScript深入之执行上下文栈》中讲到,当JavaScript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。 对于每个执行上下文,都有三个重要属性 变量对象(Variable object,VO) 作用域链(Sc 阅读全文
posted @ 2017-10-31 16:15 qiaoyang_z 阅读(436) 评论(0) 推荐(0) 编辑
摘要: 在《JavaScript深入之执行上下文栈》中讲到,当JavaScript代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。 对于每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用域链(S 阅读全文
posted @ 2017-10-31 16:14 qiaoyang_z 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 在上篇《JavaScript深入之执行上下文栈》中讲到,当 JavaScript 代码执行一段可执行代码(executable code)时,会创建对应的执行上下文(execution context)。 对于每个执行上下文,都有三个重要属性: 变量对象(Variable object,VO) 作用 阅读全文
posted @ 2017-10-31 16:13 qiaoyang_z 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 顺序执行? 如果要问到 JavaScript 代码执行顺序的话,想必写过 JavaScript 的开发者都会有个直观的印象,那就是顺序执行,毕竟: var foo = function () { console.log('foo1'); } foo(); // foo1 var foo = func 阅读全文
posted @ 2017-10-31 16:12 qiaoyang_z 阅读(546) 评论(0) 推荐(1) 编辑
摘要: 作用域 作用域是指程序源代码中定义变量的区域。 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript 采用词法作用域(lexical scoping),也就是静态作用域。 静态作用域与动态作用域 因为 JavaScript 采用的是词法作用域,函数的作用域在函数定 阅读全文
posted @ 2017-10-31 16:11 qiaoyang_z 阅读(3745) 评论(0) 推荐(2) 编辑
摘要: 构造函数创建对象 我们先使用构造函数创建一个对象: function Person() { } var person = new Person(); person.name = 'Kevin'; console.log(person.name) // Kevin 在这个例子中,Person 就是一个 阅读全文
posted @ 2017-10-31 16:07 qiaoyang_z 阅读(575) 评论(0) 推荐(0) 编辑