JavaScript执行环境作用域

戏子无情 提交于 2020-01-29 05:35:52

执行环境

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)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!