第3章 第4节 延长作用域链,垃圾回收

延长作用域链

另外关于延长作用域链问题:以下的两种情况会使作用域链延长

  1. try-catch语句的catch块;
  2. with语句;
    这个两个语句都会再原本的作用域链的前端添加一个变量对象。对于with语句来说,新添加的变量对象包含着with括号中指定对象的所有属性和方法所作的变量声明。对于catch来说,当try块发生错误时,代码执行流程自动转入到catch块,并将异常对象推入到作用域链的前端。catch块执行完毕后,作用域链就会返回原来的状态。
    在这里插入图片描述
    当代码运行到with语句时,运行期上下文的作用域链临时被改变了。一个新的可变对象被创建,它包含了参数指定的对象的所有属性。这个对象将被推入作用域链的头部,这意味着函数的所有局部变量现在处于第二个作用域链对象中,因此访问代价更高了。如下图所示:
    在这里插入图片描述

posted @ 2022-04-06 23:53  szmtjs10  阅读(34)  评论(0编辑  收藏  举报