JS的变量用来存储基本值类型数据与引用类型数据
JS的基本值类型有:Undefined、Null、Boolean、Number、String五种;他们存放于栈内存中,可以直接操作他们的值。
JS引用类型的值是以对象形式存放在堆内存中,JS不允许直接访问堆内存,所以对对象的操作,实际上是在操作对象的引用。
JS的动态属性
引用类型可以为其动态的添加属性和方法、下面代码演示了如何为一个名为person的对象添加name属性:
var person=new Object(); person.name="bobo"; console.log(person.name);
JS的动态属性是给对引用类型数据而言的,对于基本值类型不行。
JS变量的复制
基本值类型数据从一个变量向另一个变量复制后,两个变量相互独立,对他们进行操作互不影响。
引用类型数据从一个变量向另一个变量复制后,两个变量仍然引用的是同一个对象,所以改变其中一个变量,就会影响另一个变量。
var person=new Object(); person2=person; person.name="bobo2"; console.log(person.name+"---"+person2.name);//bobo2---bobo2
JS执行环境与作用域
JS执行环境中包含变量与函数,最大的执行环境称为全局环境;
JS的每个函数都有自己的执行环境,函数一经执行就会被压进环境栈中,函数执行完毕后会将其从环境栈中弹出。将执行流控制权交给之前的执行环境。
代码在执行过程中,会创建变量的作用域链,作用域是为了保证所有变量与函数能够被有序地访问。
下面代码演示了 当我们在函数中使用某变量时,若在当前环境中找不到改变量,那么就会从当前环境沿着作用域链一级一级搜索,直到搜索到为止。搜不到的话就会产生错误。
var inputname="bigboss"; function Changename() { if (inputname=="bobo") { inputname="bigboss"; }else { inputname="bobo"; } } Changename(); console.log(inputname);//bobo
当我们在if语句中定义变量或者在for语句中定义变量都会使变量存在于全局环境中。
if (true) { var currentvalue=10; } console.log(currentvalue);//10 for (var oo = 0; oo < 15; oo++) { //dosomething } console.log(oo);//15
管理内存
在定义并使用完引用变量后,若该数据不再使用可见该数据设置为null,来解除引用。