理解JavaScript的变量,变量作用域,作用域链

1. JavaScript的变量分为两种

  • 全局变量(Global variable):可以在脚本的任何位置被引用。

  • 局部变量(Local variable):只存在于声明它的那个函数的内部,这个函数之外是无法引用的。

2. 关键字var设定了变量的作用域

  • 使用var声明变量那么这个变量就是局部变量。JavaScript的全局变量是全局对象的属性。
    当使用var声明一个变量时,这个变量时无法通过delete运算符删除的。如:
    var m =1;   //t是一个不可删除的全局变量
    n = 2;  //创建全局对象的一个可删除的属性
    this.t = 3; //创建全局对象的一个可删除的属性

    delete m//false:变量没有被删除
    delete n//true:变量被删除了
    delete this.t  //true:变量被删除了
  • 没有使用var就是一个全局变量。 如:
   function square(num){ 
        global = num * num; //global是一个全局变量
        return global;
    }
    var local = 50; //local是一个局部变量
    var number = square(20); //number是一个局部变量
    alert(global); //结果:400

3.执行环境(execution context)

每个执行环境都有一个与之关联的变量对象,环境中定义的所有的变量和函数都保存在这个变量对象中。

4. 作用域链(scope chain)

JavaScript中每个函数都有一个执行环境,当代码在一个环境中执行时,就会创建变量对象的作用域链。
  • 作用域链用途:保证对执行环境有权访问的变量和函数的有序访问。

  • 如果这个环境是函数,则将其活动对象作为变量对象。

  • 作用域链的前端,始终都是当期那执行环境的代码所在的变量对象。作用域链中的下一个变量对象来自包含(外部)环境,而在再下一个变量对象则是来自下一个包含环境,这样一直延续到全局执行环境。

  • 全局执行环境的变量对象始终都是作用域链中的最后一个对象。

5. 作用域链组成

在JavaScript的最顶层代码,也就是不包含在任何函数定义内的代码,作用域链由一个全局对象组成。

  • 在不包含嵌套的函数体内,作用域链上有两个对象:(1)定义函数参数和局部变量对象。 (2)全局对象。

  • 在一个嵌套的函数体内,作用域链上至少有三个对象。

6. 理解作用域链

当定义一个函数时,它实际上保存一个作用域链,当调用这个函数时,它创建一个新的对象来存储它的局部变量,并将这个对象添加到保存它的作用域链上。

7. 作用域链访问

内部环境可以通过作用域链访问所在的外部环境,但是外部环境不能访问内部环境的任何变量和函数。

例如:

    var color1 = "blue";
    function changeColor(){
        var color2 = "red";
        function swapColor(){ 
        var temp = color2;
        color2 = color1;
        color1 = temp;
        //这里可以访问color1,color2,temp 
        //(即swapColor这个函数作用域内)
    }
    //这里可以访问color1,color2,但是不能访问temp 
    //(即在changeColor这个大函数的作用域内)
    swapColor();
    }
    //这里只能访问color1 (即全局作用域)
    changeColor();
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

英子的搬砖日志

您的鼓励是我创作的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值