执行环境及作用域

本文探讨了JavaScript中的执行环境概念,包括全局执行环境和函数执行环境的特点,以及它们如何影响变量和函数的作用域。此外,还介绍了JavaScript中变量声明与查询标识符的工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

执行环境:定义了变量和函数有权访问的其他数据,决定了他们各自的行为;每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中;
全局执行环境是最外层的一个执行环境。全局执行环境被认为是window对象,因此所有全局的变量和函数都是作为window对象的属性和方法创建的;某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数也会被销毁;
每个函数都有自己的执行环境。内部环境可以通过作用域链访问所有的外部环境,但是外部环境不能访问内部环境的任何变量和函数;
// 全局作用域:供所有代码执行的环境,只要浏览器不关闭他就不会消失;
// 私有作用域:函数执行的时候,开辟的用来解析函数体中代码的全新栈内存,他也叫私有作用域

// 私有作用域可以访问全局作用域,全局作用域不可访问私有作用域;
// 体现在,在私有作用域中可以访问和调用全局作用域的变量,但是全局作用域不可以访问和调用私有作用域的变量
//    var num = 1;
//    var obj = {name: 'zx', age: 26};
//    function sum() {
//        var n = num;
//        console.log(n);
//        function fn() {
//            console.log('函数')
//        }
//        fn();
//    }
//    sum();// 函数体里边的代码开始解析
// sum函数被调用,这时候会开辟一个全新私有作用域(全新栈内存),供我们函数体中的代码字符解析执行;

// 意义:理解全局作用域和私有作用域,同时也就理解全局变量和私有变量; 私有和全局之间的关系。所以全局变量也叫公共变量,公有变量。

2.没有块级作用域:
if(true){
    var color "blue";
}
console.log(color)  //返回值为blue;在其他语言中,color会在if执行完毕后销毁,但在js中在if语句中的变量声明会将变量添加到当前的执行环境中;在外部也可以访问到;
a)声明变量
使用var声明的变量会直接添加到最接近的环境中。如果初始化变量没有使用var,该变量会自动添加到全局环境中;
function add(num1,num2){
    var sum = num1 + num2;
    return sum;
}
console.log(add(103));//返回13;
console.log(sum//  会报错,sum属于add的局部变量,外部访问不了;
function add(num1,num2){
    sum = num1 + num2;
    return sum;
}
    console.log(add(103));//返回13;
    console.log(sum//  返回13;  由于sum声明的时候没有var所以属于全局变量,固在外部也可以访问到;

b)查询标识符;
搜索过程是从作用域链的前端开始,向上逐级查询,直到找到名字匹配的标识符;如果在局部环境中找到该标识符,则停止搜索;如果在局部环境中没有找到,则继续延作用域链向上搜索,一直追溯到全局环境变的变量对象;如果在全局环境中没有找到标识符,意味着该变量尚未声明;
 var color "red";
function getColor(){
    return color;
}
 console.log(getColor());//返回red;先在getColor()函数中搜索,没有就向上搜索,全局环境中搜索找到color;
 var color "red";
 function getColor(){
     var color "blue"
     return color;
 }
 console.log(getColor());//返回blue;先在getColor()函数中搜索,找到color就不会在向上搜索;


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值