# 变量
变量在不同环境中是自动转换的,没有限定某种类型
## 变量2种不同类型的值
* 基本类型 ---保存在栈内存中的简单数据,固定大小,按值访问
* 引用类型----保存在堆内存中的对象,栈内存中保存对象的地址,通过地址找到堆中的对象,按引用访问
![](https://box.kancloud.cn/87fbc936c6409ea35a2c7539a06c5623_424x292.png)
* * * * *
* 复制对象,只会复制对象在栈中的引用地址,堆内存无法复制
* 基本类型复制,复制的是值本身
*js 函数中所有的参数都是按值传递,即使参数是对象,和php不同(&地址符)
判断object的具体类型
* 基本类型判断用typeof
* 用instanceof判断具体是对象,数组,还是正则
`alert(box instanceof Array)`
## 作用域
if,for等没有封闭作用域的功能,都是window下的
函数里面有封闭作用域
~~~
function box(){
var a=100; //初始化变量必须用var,如果要全局,在函数外面定义
}
~~~
变量的搜索查询,从近往外搜索
## 内存
js自行管理内存,垃圾回收器会周期性运行
手动回收内存
~~~
var box={}
box=null;//解除引用,等待垃圾回收
~~~