JS 之作用域

1、作用域

作用域: 内部环境可以通过作用域链访问所有的外部环境,但外部环境不能访问内部环境中的任何变量和函数。这些环境之间的联系是线性、有次序的。每个环境都可以向上搜索作用域链,以查询变量和函数名;但任何环境都不能通过向下搜索作用域链而进入另一个执行环境。

var color = "blue"; 
function changeColor(){ 
 var anotherColor = "red"; 
 function swapColors(){ 
 var tempColor = anotherColor; 
 anotherColor = color; 
 color = tempColor; 
 
 // 这里可以访问 color、anotherColor 和 tempColor 
 } 
 // 这里可以访问 color 和 anotherColor,但不能访问 tempColor 
 swapColors(); 
} 
// 这里只能访问 color 
changeColor(); 
复制代码
    1. 以上代码共涉及 3 个执行环境:全局环境、changeColor()的局部环境和 swapColors()的局部环境。全局环境中有一个变量 color 和一个函数changeColor()。changeColor()的局部环境中有一个名为 anotherColor 的变量和一个名为 swapColors()的函数,但它也可以访问全局环境中的变量 color。swapColors()的局部环境中有一个变量 tempColor,该变量只能在这个境中访问到。无论全局环境还是 changeColor()的局部环境都无权访问 tempColor。然而,在swapColors()内部则可以访问其他两个环境中的所有变量,因为那两个环境是它的父执行环境。图 4-3 形象地展示了前面这个例子的作用域链。
    1. 对于这个例子中的 swapColors() 而言,其作用域链中包含 3 个对象:swapColors() 的变量对象、changeColor() 的变量对象和全局变量对象swapColors() 的局部环境开始时会先在自己的变量对象中搜索变量和函数名,如果搜索不到则再搜索上一级作用域链。changeColor() 的作用域链,执行环境及作用域 75 中只包含两个对象:它自己的变量对象和全局变量对象。这也就是说,它不能访问 swapColors() 的环境.

image.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享