JS执行环境与作用域理解

 执行环境定义了变量或函数有权访问的其他数据,每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中.执行环境分为全局执行环境和局部执行环境,在web浏览器中,全局执行环境默认为window.当代码在环境中执行时,会创建变量对象的一个作用域链

如果用一个矩形来表示特定的执行环境.其中,内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数.每个环境都可以向上搜索作用域链,但任何环境都不能通过向下搜索作用域链而进入另一个执行环境

一个简单的例子展示changeColor函数可以访问外部的color属性,但是函数外部不能访问size属性

var color = 'red'
function changeColor () {
  var size = 'big'
  color = 'yellow'
}

console.log(color) //yellow
console.log(size) // 报错

var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为undefined。es6中新增的let和const不允许变量提升

es5中没有块级作用域, 在一个for循环中使用var声明的i,for循环结束后还是可以访问.es6中增加了let,let实际上为 JavaScript 新增了块级作用域

for (var i = 0; i < 5; i++) {
  console.log(i); // 0, 1, 2, 3, 4
  
}
console.log(i); // 5

for (let i = 0; i < 5; i++) {
  console.log(i); // 0, 1, 2, 3, 4
  
}
console.log(i); // 报错

 

posted @ 2020-02-29 15:17  潇湘羽西  阅读(251)  评论(0编辑  收藏  举报