javascript高级程序设计之变量、作用域和内存问题

1、基本类型和引用类型的值

1.1 动态属性

对于引用类型的值,可以为其添加属性和方法,也可以改变和删除其属性和方法

1.2 复制变量值

基本类型的复制的值是相互独立的

引用类型的复制,其值的副本是指针,两个变量实际上引用同一个对象,改变其中一个变量会影响另一个变量。

1.3 传递参数

所有函数的参数都是按值传递。

1.4 检测类型

基本数据类型可以使用typeof来判断

引用类型使用instanceof来判断是什么类型的对象

2、执行环境及作用域

执行环境定义了变量或者函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。

全局执行环境是最外围的一个执行环境。宿主环境不同,表示执行环境的对象也不一样。在web浏览器中,全局执行环境是window对象。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁。

每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。而在函数执行完毕后,栈将其环境弹出,把控制权返回给之前的执行环境。

2.1 延长作用域

try-catch语句的catch块和with语句可以延长作用域

2.2 没有块级作用域

  • 声明变量

使用var声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境 就是函数的局部环境;在with语句中,最接近的环境是函数环境 。如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境。

  • 查询标识符

搜索过程从作用域的前端开始,向上逐级查询与给定名字匹配的标识符。如果在局部环境中找到了该标识符,搜索过程停止,变量就绪。如果在局部环境中没有找到该变量名,则继续沿作用域链向上搜索。搜索过程将一直追溯到全局环境的变量对象。如果在全局环境中也没有找到这个标识符,则意味着该变量尚未声明。

3、垃圾收集

3.1 标记清除

最常用的垃圾收集方式是标记清除。

3.2 引用计数

3.3 性能问题

3.4 管理内存

猜你喜欢

转载自blog.csdn.net/wuli2496/article/details/114237332
今日推荐