大涛子
大涛子
## 自动执行 ```js function run(gen) { return new Promise(function(resolve, reject) { if (typeof gen == "function") gen = gen(); // 如果 gen 不是一个迭代器 if (!gen || typeof gen.next !== "function")...
## Promise 定义 总结一下**回调函数**的情况: - 回调函数执行多次 - 回调函数没有执行 - 回调函数有时同步执行有时异步执行 对于这些情况,可能都要在回调函数中做些处理,并且每次执行回调函数的时候都要做些处理,这就带来了很多重复的代码。 **回调地狱**的其他问题: - 难以复用 - 堆栈信息被断开 - 借助外层变量 **Promise** 使得以上绝大部分的问题都得到了解决。 1. 嵌套问题 ```js request(url) .then(function(result) { return writeFileAsynv("1.txt", result); })...
## ES6 系列之 WeakMap ### WeakMap 特性 **1.WeakMap 只接受对象作为键名** ```js const map = new WeakMap(); map.set(1, 2); // Uncaught TypeError: Invalid value used as weak map key map.set(null, 2); //...
## ES6 系列之 defineProperty 与 proxy ### definePropety ES5 提供了 **Object.defineProperty** 方法,该方法可以在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。 语法 ```js Object.defineProperty(obj, prop, descriptor); ``` 参数 - **obj**: 要在其上定义属性的对象。 - **prop**: 要定义或修改的属性的名称。 - **descriptor**: 将被定义或修改的属性的描述符。 ```js var...
## ES6 系列之模拟实现一个 Set 数据结构 Set 函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。 ```js let set = new Set([1, 2, 3, 4, 4]); console.log(set); // Set(4) {1, 2, 3, 4} set = new Set(new...
## ES6 系列之 Symbol 类型 ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。 1. Symbol 值通过 Symbol 函数生成,使用 typeof,结果为 "symbol" ```js var s = Symbol(); console.log(typeof s); // "symbol" ``` 2. Symbol 函数前不能使用 new 命令,否则会报错。这是因为生成的...
## ES6 系列之迭代器与 for of 所谓**迭代器**,其实就是一个具有 next() 方法的对象,每次调用 next() 都会返回一个结果对象,该结果对象有两个属性,value 表示当前的值,done 表示遍历是否结束。 用 ES5 的语法创建一个迭代器: ```js function createIterator(item) { var i = 0; return { next: function() { var done...
## ES6 系列之箭头函数 如果需要直接返回一个对象: ```js let func = (value, num) => ({ total: value * num }); ``` 与变量解构结合: ```js let func = ({ value, num }) => ({ total:...
## ES6 系列之模板字符串 如果你碰巧要在字符串中使用反撇号,你可以使用反斜杠转义: ```js let message = `Hello \` World`; console.log(message); // Hello ` World ``` 值得一提的是,在模板字符串中,空格、缩进、换行都会被保留。 模板字符串支持**嵌入变量**,只需要将变量名写在 `${}` 之中,其实不止变量,任意的 JavaScript 表达式都是可以的。值得一提的是,模板字符串支持**嵌套**: ```js let arr = [{ value: 1...
## ES6 系列之 let 和 const 为了加强对变量生命周期的控制,ECMAScript 6 引入了**块级作用域**。 块级作用域存在于: - 函数内部 - 块中(字符 { 和 } 之间的区域) 块级声明用于声明在指定块的作用域之外无法访问的变量。 let 和 const 都是块级声明的一种。特点有: 1. 不会被提升 2. 重复报错 3. 不绑定全局作用域 const...