作用域

1.什么是作用域链

1.1 概念

作用域链其实就是代码在执行过程中创建变量的一个作用域链,保证对执行环境有权访问的所有变量和函数可以有序的访问。

1.2 规则

内部环境可以通过作用域链访问外部,而外部不能访问内部。

var color = 'red';
function change() {
  var changeColor = 'blue';
  console.log(color);    //red 
  console.log(changeColor);    //blue
  console.log(otherColor);    //not defined
  function other() {
    var otherColor = 'yellow'
    console.log(color,changeColor,otherColor)  //red blue yellow
  }
  other()
}
change()
console.log(color);    //red
console.log(changeColor);  //not defined
console.log(otherColor);    //not defined

根据上面代码的执行结果,我们可以看到越是内层的函数,可以访问到的变量越多,其实就是因为内部的函数可以通过作用域链逐级向上访问,一直到全局,而最外层却只能访问到全局的变量,内部函数的变量却无法访问到。

1.3 查询标识符

从作用域前端,向上逐级查询给定名字匹配的标识符。实质上还是沿着作用域链从内向外去查找与给定名字匹配的标识符

2. 声明变量

2.1 声明变量的方式
2.1.1 var 声明变量

var声明的变量,会提前到最近的作用域前头,不加var声明提到全局环境,可以重复声明赋值。

var a = 1;
function add(){
   var a = 2;
   var b = 3;
   return sum = a + b ;
   console.log(sum);   //5
}
add()
console.log(sum);  //5
2.1.2 let 声明变量

let声明不会声明提前,作用域在当前区域,但是不可以重复声明同一名称的变量。

2.1.3 const 声明变量

const声明的时候必须赋值,且不能被修改。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容