4.1 基本类型和引用类型的值
区别:
基本类型传递的是值, 操作的也是值本身.
引用类型传递是对象的引用(也叫地址 是16进制), 访问的也是引用. javascript不允许直接访问内存中的位置
基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;
对象存储在堆内存中, 对象的引用存储在栈内存中.
4.1.3 传递参数
ECMAScript中所有函数的参数都是按值传递的.
function setName(obj){
obj.name = "Nicholas";
obj = new Object();
obj.name = "Gery"
}
const person = new Object();
setName(person);
console.log(persomn.name); // "Nicholas"
局部对象/变量会在函数执行完毕后立即被销毁
4.1.4 检测类型
要检测一个变量是不是基本数据类型, typeof操作符是最佳的工具. 检测引用类型的值时, ECMAScript提供了instanceof操作符
因此,在检测一个引用类型值和Object构造函数时,instanceof操作符始终返回true,当然.如果使用instanceof操作符检测基本类型值时, 始终返回false,因为基本类型不是对象
4.2 执行环境及作用域
延长作用域链的方法:
1、try catch语句的catch块
2、with语句
4.2.2 没有块级作用域
使用var声明的变量会自动被添加到最接近的环境中.在函数内部, 最接近的环境就是函数的局部环境, 在with语句中,最接近的环境是函数环境.如果初始化变量时没有使用var声明,该变量会自动被添加到全局环境.
4.3 垃圾收集
- 标记清除
- 引用计数
- 性能问题
- 管理内存
javascript 是一门具有自动垃圾收集机制的编程语言.
网友评论