JavaScript 进阶 - 第1天

文章目录

  • JavaScript进阶(1) - 笔记
  • 1 作用域
    • 1.1 局部作用域
      • 1.1.1 函数作用域
      • 1.1.2 块作用域
    • 1.2 全局作用域
    • 1.3 作用域链
    • 1.4 垃圾回收机制
      • 1.4.1 拓展-JS垃圾回收机制-算法说明
    • 1.5 闭包
    • 1.6 变量提升
  • 2 函数
    • 2.1 函数进阶(提升)
    • 2.2 函数参数
      • 2.2.1 默认值
      • 2.2.2 动态参数
      • 2.2.3 剩余参数
      • 2.2.4 展开运算符
    • 2.3 箭头函数(重要)
      • 2.3.1 箭头函数参数
      • 2.3.2 箭头函数 this
  • 3 解构赋值
    • 3.1 数组解构
    • 3.2 对象解构
  • 4 综合案例
    • 4.1 forEach遍历数组(重点)
    • 4.2 filter筛选数组(重点)

JavaScript进阶(1) - 笔记

学习作用域、变量提升、闭包等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法,降低代码的冗余度。

  • 理解作用域对程序执行的影响
  • 能够分析程序执行的作用域范围
  • 理解闭包本质,利用闭包创建隔离作用域
  • 了解什么变量提升及函数提升
  • 掌握箭头函数、解析剩余参数等简洁语法

1 作用域

了解作用域对程序执行的影响及作用域链的查找机制,使用闭包函数创建隔离作用域避免全局变量污染。

作用域(scope)规定了变量能够被访问的“范围”,离开了这个“范围”变量便不能被访问,作用域分为全局作用域和局部作用域。

1.1 局部作用域

局部作用域分为函数作用域和块作用域。

1.1.1 函数作用域

在函数内部声明的变量只能在函数内部被访问,外部无法直接访问。

<script>
  // 声明 counter 函数
  function counter(x, y) {
    // 函数内部声明的变量
    const s = x + y
    console.log(s) // 18
  }
  // 设用 counter 函数
  counter(10, 8)
  // 访问变量 s
  console.log(s)// 报错
script>

总结:

  1. 函数内部声明的变量,在函数外部无法被访问。
  2. 函数的参数也是函数内部的局部变量。
  3. 不同函数内部声明的变量无法互相访问。
  4. 函数执行完毕后,函数内部的变量实际被清空了。

1.1.2 块作用域

在 JavaScript 中使用 {} 包裹的代码称为代码块,代码块内部声明的变量外部将【有可能】无法被访问。

<script>
  {
    // age 只能在该代码块中被访问
    let age = 18;
    console.log(age); // 正常
  }
  
  // 超出了 age 的作用域
  console.log(age) // 报错
  
  let flag = true;
  if(flag) {
    // str 只能在该代码块中被访问
    let str = 'hello world!'
    console.log(str); // 正常
  }
  
  // 超出了 age 的作用域
  console.log(str); // 报错
  
  for(let t = 1; t <= 6; t++) {
    // t 只能在该代码块中被访问
    console.log(t); // 正常
  }
  
  // 超出了 t 的作用域
  console.log(t); // 报错
script>

JavaScript 中除了变量外还有常量,常量与变量本质的区别是【常量必须要有值且不允许被重新赋值】,常量值为对象时其属性和方法允许重新赋值。

<script>
  // 必须要有值
  const version = '1.0.0';

  // 不能重新赋值
  // version = '1.0.1';

  // 常量值为对象类型
  const user = {
    name: '小明',
    age: 18
  }

  // 不能重新赋值
  user = {};

  // 属性和方法允许被修改
  user.name = '小小明';
  user.gender = '男';
script>

总结:

  1. let 声明的变量会产生块作用域,var 不会产生块作用域。
  2. const 声明的常量也会产生块作用域。
  3. 不同代码块之间的变量无法互相访问。
  4. 推荐使用 letconst

注:开发中 letconst 经常不加区分的使用,如果担心某个值会不小被修改时,则只能使用 const 声明成常量。

1.2 全局作用域

你可能感兴趣的:(JavaScript,javascript,前端,开发语言,集成学习,笔记)