标签:使用 关系 循环 复制 垃圾 自动 全局变量 内存 处理
一,JavaScript中的变量
1,JavaScript变量是松散类型的,决定了它的本质就是:在特定的生命周期中,保存特定的值。因为不存在定义某个变量必须要保存何种数据类型,因此其值和数据类型是可以在生命周期内改变。,
2,JavaScript变量有两种数据类型的值:基本类型值和引用类型值。引用类型值是用多个值构成的对象。
在将一个值赋值给一个变量时,解析器必须先确定这个是基本数据类型还好引用类型值。
其中5中基本数据类型是按值访问的,因为可以操作保存在变量中的实际的值;引用类型的值保存的是内存中的对象,(也就是说不能直接改变对象中的具体指,必须先访问该变量访问到对象地址。引用类型的值是按引用访问的。)
3,属性的可变现:基本数据类型,可以改变值;引用数据类型,可以对属性增删改查,
4,复制变量值:(赋值给另一个变量)
按值传递是做了一个副本,在副本上操作和原来的变量没有关系;按引用传递是指向同一个文件,比如obj1复制给obj2,则obj1和obj2,改变文件,都会影响彼此的值。
。。。。。。。。
5,变量作为传递参数(无论是基本数据类型还是引用数据类型,都是按照值传递!!!!)
基本数据类型按值传递没什么疑问,但是引用类型呢?说引用类型按值传递,更准确的说是引用类型是将全局引用类型的地址按值传递。然后按照引用类型切断指向的规则,处理!!!!!!!!!!
(如果在函数体内新建对象,指向外部的引用类型,操作新对象并不会影响外部引用类型)
function setName(obj){obj.name="lipengffei"} var person=new Object(); setName(person);alert(person.name);//"lipengfei"
//在这里并没有在函数体内创建新的对象,而是按值传递创建了一个obj,指向person 。利用该地址声明并赋值了一个属性。这样再利用person访问,就同样会访问到了,而结束后,obj就消失了。但是person中的内容却保存了下来。
function setName(obj){ obj.name="sdfsd";obj=new object();obj.name="abc";} var person=new Object();setName(person);alert(person.name);//sdfsd;
//在这里函数体中又声明了一次obj,这样就切断了原来obj的指向。这样就和person没有关系了。以后的操作就是各自操作各自的了、
6,检查类型
要检查一个变量是不是基本数据类型,用的是typeof
如果是基本数据类型,则返回基本数据类型的类型,如果是null或者对象,则都是返回Object(这样就不能区分是什么类型的对象了)
instanceof操作符,则对对象来判断是否属于某种引用类型,返回的是true或者false;例如:alert(person instaceof Array);判断是否是个数组对象。
二,执行环境和作用域
1, 执行环境,定义了变量或者函数有权利访问其他数据的权利。
在web浏览器中,全局环境被认为是window对象,因此所有的全局变量和函数都是作为window的属性和方法。
在某个环境中执行完,其变量和函数自动销毁。
2,作用域链。
保证对执行环境有权访问的变量和函数进行有序的访问。执行顺序是从作用域前端,依次往上寻找。例如:一个函数会,先在函数体中作用,影响了外部的某变量,则变量再往上寻找,来作用。
3,延长作用域链
在作用域链前端临时增加一个变量对象,该变量对象会在代码执行完后移除,有两种情况会是这样的:
try-catch语句的catch语句块(会创建一个新的变量对象,包含的是被抛出的错误对象的声明);with语句(将变量添加到指定的作用域中,如url和location.url);
4,没有块级作用域
既是在{}中的局部变量在C语言或者java语言中,在外部是不能访问的到的,而在JavaScript还是会访问到。这里说 的{}是指语句的{},而不是函数的局部变量。函数中的局部变量还是不会释放到外部
这个的原因主要是因为在语句的{}中并没有封闭的执行环境,他们还是在同一个执行环境中,因此会访问到。而其他语言是不能的!!!!!
三,垃圾清除
JavaScript的垃圾回收是自动回收机制,离开作用域的变量值将被自动标记,自动清除。
“标记清除”是目前最主流的垃圾回收机制,思想是给当前不使用的值上加上标记,然后回收。
“引用计数”思想是记录所有值被引用的次数,这种算法是有问题的!!!!!例如循环引用。
解除一个对象的占用空间直接用null就可以了。
标签:使用 关系 循环 复制 垃圾 自动 全局变量 内存 处理
原文地址:http://www.cnblogs.com/lpfworld/p/7634937.html