你不知道的 Javascript【推荐】攻略
1. 简介
你不知道的 Javascript 是一本非常优秀的JavaScript教程,分为上下两册,包含了JavaScript的许多高阶概念和一些常见误解,非常适合深入学习Javascript的开发者。本教程文字讲解详细,理论与实践相结合,是你深入学习Javascript的好帮手。
2. 内容概述
上册
上册主要介绍了Javascript的作用域和闭包相关的内容:
- 第1章: 作用域是什么
讲解了Javascript作用域的概念,以及使用 var
let
和 const
声明变量的区别。同时介绍了块级作用域和函数作用域。
- 第2章: 词法作用域
通过介绍词法环境,引出了Javascript使用的词法作用域模型。
- 第3章: 函数 vs 块级作用域
在Javascript中,函数可以创造出作用域,也可以赋值给变量。而在块级作用域(使用let和const)中,无法这样做。本章详细介绍了这一特性。
- 第4章: 提升
介绍提升的概念,详细讲述了Javascript内部对于变量和函数定义的处理以及它们之间的冲突。
- 第5章: 作用域闭包
强调了闭包是Javascript中最强大的特性之一。同时,深入讲解了闭包是如何工作的,以及闭包在实际开发中的应用场景。
下册
下册主要介绍了Javascript的异步编程和JavaScript中一些高级特性,包括:
- 第1章: 异步和性能
介绍了Javascript中的异步编程以及其在性能方面的作用;讲解了回调函数、Promise等异步编程的实现方式,以及它们之间的差异。
- 第2章: 回调
延续上一章的内容,本章具体讲解了回调(callback)函数,以及如何防止回调函数中的错误。
- 第3章: Promise
深入讲解Promise,其设计思想,以及如何用Promise实现异步操作。
- 第4章: 生成器
介绍了ES6新增的生成器(generator),以及它的迭代器和异步编程实现方式。
- 第5章: 异步流程控制
深入介绍了异步流程控制实现的四种方式,包括回调函数,Promise,生成器和async/await语法。
3. 示例
以下是两个关于上册中闭包的示例:
- 创建计数器
function createCounter() {
let count = 0;
return function increment() {
count++;
console.log(count);
}
}
let counter = createCounter();
counter(); // 1
counter(); // 2
counter(); // 3
上面的代码中,createCounter
函数返回一个闭包函数,该闭包函数持有 count
变量,并在每次被调用时将其增加。在这个例子中,count
的值在使用它的最外层函数 createCounter
中声明,但只能在 inner 函数中访问。
- 缓存函数
function memoization(fn) {
const cache = {};
return function(arg) {
if(cache[arg]) {
console.log("cache");
return cache[arg];
}else{
console.log("not cache");
const result = fn(arg);
cache[arg] = result;
return result;
}
}
}
function multiply(x) {
return x * x;
}
const memoMultiply = memoization(multiply);
memoMultiply(2);
memoMultiply(2);
上面的代码中,memoization
函数返回一个带有缓存功能的闭包函数。 它将在执行 fn(arg)
之前检查传递给它的 arg
参数是否已经在缓存中。 如果是,则直接返回缓存中的结果,如果不是,则执行新的 fn(arg)
,将结果存入缓存,并返回该结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:你不知道的 javascript【推荐】 - Python技术站