变量
基本类型和引用类型
-
不能给基本类型添加属性,只在赋值时有效,下一行访问时立刻消失。
-
基本类型复制是先创建一个变量存值,然后把这个变量赋值给对应的变量,独立的内存空间。引用类型是引用同一对象,修改属性会有影响。
-
传递参数时都是按值传递,传递参数就像是复制。基本类型传递参数后函数内的变量与函数外的变量相互独立。引用类型则因为是引用的同一内存地址的对象,函数内修改会体现在函数外,如果在函数内重写obj时,因为变量引用变成局部对象,局部对象在函数执行完毕后就销毁了,所以不会影响到外部函数,如
function setName(obj){ obj.name = "nihao"; obj = new Object; obj.name = "gry"; } var person = new Object(); setName(person); alert(person.name);//"nihao"
-
检测基本类型用typeof,检测引用类型用instanceof
作用域
- 执行环境和变量对象是相互关联的,执行环境是栈操作。
- 作用域链。作用域链的前端都是当前执行代码所在的环境的变量对象,如果环境是函数的话,活动对象时argument对象,下一个变量就是外部的环境,以此类推。
- 由于没有块级作用域,所以查询标识符都是惰性查询