变量、作用域和内存问题

js里的变量包括基本类型和引用类型,基本类型存储在栈中,引用类型的引用(指针)存储在栈中,数据存储在堆中。(对象数据大,占内存多,不宜存储在栈,会影响性能。引用类型访问数据通过栈的指针访问)
基本类型不能动态添加属性,引用类型可以。

## 复制变量值 ##
var num1=5;
var num2=num1;
基本类型的复制是值复制,即num2=5中的5与num1不一样;
var obj=new Object();
var obj2=obj1;
引用类型的复制是把保存在栈的引用复制,产生一个副本,同时这个副本指向堆中同一对象。(同一对象的不同引用)。
在我理解,说到底就是**栈中数据的复制**。

## 传参 ##
值传递。(栈中的值,如同变量的复制一样)。

## 检测类型 ##
检测基本数据类型的值:typeof
检测引用类型的值:instanceof(a instanceof b),typeof(返回object)。

## 执行环境及作用域(context) ##
全局执行环境:window对象。
执行到某个函数时,将函数的执行环境推入环境栈,执行完毕,再从栈弹出,然后把控制权返回给之前的执行环境。
作用域链:简单理解就是当前执行环境可访问当前执行环境乃至上层执行环境的变量和函数。

## js中没有块级作用域 ##
if(true){
    var num=1;
}
alert(num);//1
ES6用let可以限制其作用域在块级中
let num

## 垃圾回收 ##
自动垃圾回收机制
有时候数据不再有用,可设置为null,可解除引用,脱离执行环境,方便垃圾回收期下次执行时回收。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值