跳到主要内容

11-JavaScript变量作用域

可以回顾02-常量和变量的笔记

{}块状作用域

  • 函数后面{}中的的作用域, 我们称之为"局部作用域"
  • 只要{}包括起来的, 是"块级作用域"
  • 块级作用域中通过var定义的变量是全局变量
  • 局部作用域中通过var定义的变量是局部变量
  • 无论是在块级作用域还是在局部作用域, 省略变量前面的let或者var就会变成一个全局变量(不推荐省略定义变量的函数)

作用域链

  • ES6新增了定义变量通过let
  • ES6除了全局作用域、局部作用域以外, 还新增了块级作用域
  • ES6虽然新增了块级作用域, 但是通过let定义变量并无差异(都是局部变量)

使用var、let定义作用域链

全局作用域我们又称之为0级作用域,0→1→2→3以此类推,形成作用域链

var num = 123;  // 全局作用域又称 0 级作用域
function demo() {
// 1级作用域
var num = 456;
function test() {
// 2级作用域
var num = 789;
console.log(num);
}
test();
}
demo();

变量在作用域链查找规则

  1. 在当前域中差找, 找到就使用当前作用域找到的
  2. 如果当前作用域中没有找到, 就去上一级作用域中查找
  3. 以此类推直到0级为止, 如果0级作用域还没找到, 就报错