JS专题2:变量 作用域和内存问题

基本类型值:简单的数据段 Undefined Null Boolean Number和String
引用类型值: 可能由多个值构成的对象。引用类型的值可以动态的添加属性和方法
     var person = new Object();
    person.name="xxx";
     alert(person.name);
基本类型的值的复制是 值拷贝  复制引用类型的值是 拷贝指针,而不是复制实际的值。复制之后两个东西都指向同一个地方。

所有函数的参数都是按值传递的。 对于简单类型就是值拷贝,对于对象传的是地址,所以函数内外都指向同一个区域
(对象不是按引用传递,是按值传递,传的是地址)
function setName(obj)
{
     obj.name="Nicholas";
     obj=new Object();
    ojb.name="Greg";
}
var person == new Object();
setName(pserson);
alert(pserson.name)// "Nicholas"   如果对象是按照引用传递的 则 这个时候应该显示 Greg

检测类型:检测一个变量是什么基本数据类型,typeof是最佳的工具。但是对于检测引用类型的值时,typeof 一般都会返回 Object ,我们知道这个 意义不大,需要具体是什么类型的对象 因此引入 instanceof  。如果变量是给定引用类型的实例,则返回true;   eg person instanceof Object 。 如果用instanceof 检测基本类新的值,则该操作始终会返回false。

执行环境:定义了变量或函数有权访问的数据。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。在web浏览器中 全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中所有的代码执行完毕后 该环境被销毁,保存在其中的变量和函数定义也随之销毁。

作用域链:保证对执行环境有权访问的所有变量和函数的有序访问。作用域链的前端始终都是当前执行的代码所在环境的变量对象。 最末端是全局执行环境的变量对象。 标识符解析是沿着作用域链一级一级搜索的过程。从最前端开始,找到则停止。 找不到将会发生错误。

延长作用域链:try-catch 语句的 catch 块    和 with语句 。 略

JS木有块级作用域链: 
   for (var i =0;i<10;i++)
{     
               doSomething(i);
}
alert(i)// 显示10

如果木有用var 声明的变量 则添加到全局环境。用var声明的变量会添加到最近的环境。

垃圾清除的两种方式:标记清除 和 引用计数(不能解决循环引用的问题)
在部分浏览器中是支持手动回收内存的,但不建议这样做 (IE: window.CollectGarbage() Opera7 : window.opera.collect())。好的习惯是手动接触引用,确保内存释放。 不需要的保存对象的变量用null初始化


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值