JavaScript 高级(进阶)

JavaScript 高级(进阶)

作用域&解构&箭头函数

作用域

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

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

  • 局部作用域
  • 全局作用域
局部作用域

局部作用域分为函数作用域和块作用域。局部作用域声明的变量外部不能使用。
1.函数作用域:

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

JavaScript 高级(进阶)_第1张图片

总结:

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

2.块作用域:

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

JavaScript 高级(进阶)_第2张图片
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. 推荐使用 let 或 const。

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

全局作用域

script标签和.js 文件的最外层就是所谓的全局作用域,在此声明的变量在函数内部也可以被访问。全局作用域中声明的变量,任何其它作用域都可以被访问。

JavaScript 高级(进阶)_第3张图片

注意:

  1. 为 window 对象动态添加的属性默认也是全局的,不推荐!
  2. 函数中未使用任何关键字声明的变量为全局变量,不推荐!!!
  3. 尽可能少的声明全局变量,防止全局变量被污染

全局作用域有哪些?

你可能感兴趣的:(javascript,前端,java)