执行环境
JavaScript中的执行环境定义了变量或函数有权访问的其他数据,决定了他们的各自行为。每个执行环境都有与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。
全局执行环境是最外围的一个执行环境。
在JavaScript中,每个函数都有自己的执行环境,当执行流进入一个环境时,函数的环境就会被推入一个环境栈中;当函数执行完毕后,栈将环境弹出,把控制权交给之前的执行环境。
作用域链
当代码在一个环境中执行,会创建变量对象的一个作用域链。作用域链的用途,是保证对执行环境有权访问的所有变量和函数的有序访问。作用链最前端,始终都是当前执行的代码所在的环境的变量对象。如果这个环境是函数,则将其活动对象作为变量对象,活动对象最开始只包含一个变量,即arguments对象(这个对象在全局不存在),作用域链中的下一个对象来自包含(外部)环境,而再下一个对象来自下一个包含环境,全局执行环境是作用域链中最后一个对象。
let color = 'green'
function change(){
if(color === 'green'){
color = color + ' cap'
}
}
change(color)
console.log(color)//green cap
在这个例子中,函数change的作用域链包括两个对象:arguments对象和全局环境的变量对象。可以在函数内部访问color,就是因为可以在这个作用域链中找到它。
在局部作用域定义的变量,可以在局部环境中与全局变量互换使用
let color = 'green'
function changeColor(){
let ano = 'red'
function swapColor(){
let temp = ano
ano = color
color = temp
//在这里可以访问color、ano、temp
}
//在这里可以访问到colo和ano,但无法访问temp
}
//在这里只能访问color
change(color)
来源:CSDN
作者:gmx9012
链接:https://blog.csdn.net/weixin_43823603/article/details/103748742