如何写好JavaScript | 青训营

47 阅读3分钟

作用域

  • 全局作用域

    • 尽量少使用,避免变量污染
  • 局部作用域

    • 函数作用域
    • 块级作用域
  • 作用域链

    • 底层变量查找机制
  • 闭包

    • 概念:一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域
    • 示例:给出示例代码进行解释
    • 内层函数+外层函数的变量
    • 外部可以访问函数内部的变量,可以实现变量的私有
    • 内存泄漏

预解析(了解)

  • 变量提升 var

  • 函数提升

    • 函数表达式不能提升

      • var fun = function(){}
    • 函数声明可以提升

  • 建议:使用let或者const,遵循先声明后使用

箭头函数

  • 各种写法

    • const fn = () => {}

    • const fn = x => {}

    • const fn = (x,y) => x + y

      • 一行代码写法,省略return
    • const fn = (x,y) => ({x,y})

      • 返回对象特殊写法
  • 动态参数

    • 普通函数:动态参数-伪数组-arguments-保存所有的参数
    • 箭头函数:没有arguments,需使用 剩余参数-数组-...args-保存溢出的参数
  • this问题

    • 箭头函数没有this沿用上级作用域this

剩余与展开

  • 剩余:解构中使用,函数参数使用

  • 展开:数组展开,对象展开

    • 展开数组 const arr = [1,2,3] ...arr === 1,2,3

解构赋值

  • 数组解构

    • [max,min,avg] = [100,60,80]
  • 对象解构

    • 变量重命名

22b30d89644ffd18df361d1e61fdb63ff8b550b8d32a46cbd6dc1ccba6824c7e.png

  • 多级解构

0a941eaba36c41f98550c0a7f4d4e82a5804fdc234f78c7e53c0d05bdacdc25e.png

  • foreach()方法遍历对象数组
  • filter() 筛选数组

fda4e9bb6a113e1c456ac9ed16dffaa1172313099f73dd0c57b45601926f233f.png

深入对象

  • 创建对象三种方式

    • new Object({ name: 'tom' })
    • const o = { name: 'tom' }
    • 构造函数
  • 构造函数

    • 语法:大写字母开头的函数

    • 创建实例(对象):new 构造函数

    • 实例化过程

        1. 创建新空对象
        1. 构造函数this指向新对象
        1. 执行构造函数代码
        1. 返回新对象

        • 构造函数里面不需要写return
    • 是函数,创建对象用的

    • 2个约定

      • 首字母大写
      • 需要用new 实例化
    • image.png

  • 实例成员&静态成员

    • 实例成员

image.png - 实例属性 - 实例方法

-   静态成员

    -   静态属性
    -   静态方法

image.png

内置构造函数

  • 一切皆对象

    • JS中几乎所有的数据都可以基于构成函数创建

      • 不同的构造器创建出来的数据拥有不同的属性和方法
    • 引用类型

      • Object,Array,RegExp,Date 等
    • 包装类型

      • String,Number,Boolean 等
  • Object

    • assign(newObj,obj)

      • 合并一个多个对象到目标对象,并返回目标对象
      • 1.拷贝对象
      • 2.为对象添加新的属性
    • keys()

      • 获取对象中所有key集合,数组
    • values()

      • 获取对象中所有的值集合,数组
  • Array

    • 常用方法(高阶函数)

      • forEach filter map reduce find every

      • 其他

        • find findIndex every some splice join sort reverse concat
      • reduce()

image.png

image.png - forEach()

image.png

    -   filter()

image.png

    -   map()

image.png

    -   join()

image.png - find()

image.png

    -   every()

        -   如果都满足一个条件则返回true
        -   如果有一个不满足返回false

    -   其他

image.png

-   Array.from()

    -   将伪数组转为数组
  • String

    • 常用方法

      • split startsWith includes substring

      • 其他

        • toUpperCase toLowerCase indexOf
    • length长度属性,String()直接使用转字符串

    • num.toString()

      • 转换为字符串

image.png

  • Number

    • Number() 直接使用传数字
    • toFixed() 设置保留小数位的长度
    • String(number) number.toString() 数字转字符串的两种方式