你不知道的 javascript【推荐】

你不知道的 Javascript【推荐】攻略

1. 简介

你不知道的 Javascript 是一本非常优秀的JavaScript教程,分为上下两册,包含了JavaScript的许多高阶概念和一些常见误解,非常适合深入学习Javascript的开发者。本教程文字讲解详细,理论与实践相结合,是你深入学习Javascript的好帮手。

2. 内容概述

上册

上册主要介绍了Javascript的作用域和闭包相关的内容:

  • 第1章: 作用域是什么

讲解了Javascript作用域的概念,以及使用 var letconst 声明变量的区别。同时介绍了块级作用域和函数作用域。

  • 第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. 示例

以下是两个关于上册中闭包的示例:

  1. 创建计数器
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 函数中访问。

  1. 缓存函数
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技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • javascript面向对象的方式实现的弹出层效果代码

    JavaScript中面向对象编程(Object-Oriented Programming,简称OOP)是一种常见的编程方式,通过将数据属性和方法封装在对象中,实现了代码的复用性、可读性和可维护性。本文将从实现弹出层效果的角度,详细讲解如何使用JavaScript面向对象的方式实现弹出层效果的代码。 构建弹出层对象 首先,我们需要创建一个弹出层对象。这个对象…

    JavaScript 2023年6月10日
    00
  • IE浏览器与FF浏览器关于Ajax传递参数值为中文时的区别实例分析

    针对“IE浏览器与FF浏览器关于Ajax传递参数值为中文时的区别实例分析”,我们可以从以下几个方面进行讲解: URL编码的区别 在使用Ajax传递参数时,中文参数需要进行URL编码,然后再进行发送。而IE浏览器和FF浏览器对URL编码的处理是不同的: IE浏览器:使用escape()函数对中文参数进行编码。 FF浏览器:使用encodeURIComponen…

    JavaScript 2023年5月19日
    00
  • JavaScript中判断为整数的多种方式及保留两位小数的方法

    JavaScript中判断为整数的多种方式及保留两位小数的方法 判断为整数的多种方式 在JavaScript中,判断一个数是否为整数是经常需要用到的操作。下面列出了常见的几种方法: 取模运算 利用数学中取模运算的特性,即整数x对于任意不等于0的正整数y,x%y的结果只可能是0到y-1之间的整数,如果x % 1等于0,则说明它为整数。具体代码如下: funct…

    JavaScript 2023年6月10日
    00
  • JavaScript函数式编程(Functional Programming)声明式与命令式实例分析

    JavaScript函数式编程(Functional Programming)声明式与命令式实例分析 什么是函数式编程? 函数式编程(Functional Programming)是一种编程范式,其核心思想是用函数去组织代码,减少对于状态的依赖和改变,强调函数的纯粹性和不可变性,从而实现代码的简洁性、健壮性和可维护性。 声明式编程与命令式编程 命令式编程 命…

    JavaScript 2023年5月27日
    00
  • javascript计算对象长度的方法

    当我们需要计算JavaScript对象的长度时,可能会遇到一些困惑。在JavaScript中,通常使用对象字面量(例如{})或构造函数创建对象。计算对象字面量和构造函数对象长度的方法略有不同。 计算对象字面量数量的方法 计算对象字面量数量的一种常见方法是使用Object.keys()方法。它会返回对象中属性名称的数组。通过计算该数组的长度,我们可以得知对象字…

    JavaScript 2023年5月27日
    00
  • Javascript Math PI 属性

    JavaScript中的Math.PI属性是一个常数,表示圆周率π的值。以下是关于Math.PI属性的完整攻略,含两个示例。 Math对象的PI属性 JavaScript对象中的PI属性是一个常数,表示圆周率π的值。 下面是PI属性语法: Math.PI 下面是一个PI属性的示例: console.log(Math.PI); // 输出 3.14159265…

    JavaScript 2023年5月11日
    00
  • JavaScript学习笔记之DOM基础操作实例小结

    JavaScript(JS)是一种广泛使用的脚本语言,常用于网页设计与动态交互效果实现。DOM(Document Object Model)文档对象模型是JS操作网页中HTML元素和样式的接口。掌握DOM基础操作是学习JS的重要一步,本文将为你介绍如何使用DOM对网页进行修改操作。 1. 加载HTML和JS 在HTML文件中引入JS,然后再通过documen…

    JavaScript 2023年6月10日
    00
  • Bootstrap Fileinput文件上传组件用法详解

    Bootstrap Fileinput文件上传组件用法详解 Bootstrap Fileinput是一款基于Bootstrap的文件上传组件,可以方便地进行文件上传并对上传的文件进行一些处理。 安装 下载源码 可以从 Bootstrap Fileinput 的官方 Github 页面下载源码:https://github.com/kartik-v/boots…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部