第4章: 变量、作用域和内存问题

2020-08-06  本文已影响0人  前端大镖客_
我是石灰

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 垃圾收集

上一篇 下一篇

猜你喜欢

热点阅读