js变量作用域和内存问题

6 篇文章 0 订阅

1.ECMAScript包含两种不同的数据类型:基本类型(Undefined,Null,Boolean,Number和String)和引用类型(多个值构成的对象)。
区别:当从一个变量向另一个变量复制引用类型的值时,这个值得副本实际上是一个指针,这两个变量都指向存储在堆中的同一个对象。两个变量实际上引用的是同一个对象,改变其中一个变量,就会影响另外一个变量。

var obj1 = new Object();
var obj2 = obj1;
obj2.name="jay";
alert(obj1.name);//结果也改成jay

传递参数:基本类型(按值传递),引用类型(直接传递内存地址,即指针)。这点和c++类似中&引用取地址符,很好理解。
2.没有块级作用域。
在if,for中声明的变量,直接被添加到当前执行环境,即当前所在函数的作用域中,不是C的块级作用域。例如:

for( var i = 0; i < 10; i++){
    var j = 1000 +i;
}
document.writeln("i的值:"+i);//i=10
document.writeln("j的值:"+j);//j=1009
用var声明的变量会被自动添加到最接近的环境中,即所在函数的局部环境。如果初始化变量没有用var声明,该变量会自动被添加到全局环境。

总结:函数的局部环境不仅有权访问该函数作用域中的变量,而且有权访问其包含父环境,乃至全局环境;但是,全局环境只能访问全局环境中定义的变量,不能直接访问局部环境中的任何数据。(即:只能走自己的区域和往上级走
3.向上搜索标识符。搜索过程:如果局部环境中找到了该标识符,则自动停止;否则,继续沿作用域向上搜索,一直追溯到全局变量。

var color = "red";
function getColor(){
var color = "blue";
return color;
}
alert(getColor());//blue

4.管理内存:一旦数据不再有用,最好将其值设为null(即解除引用)。解除引用的真正作用是让值脱离执行环境,以便垃圾收集器下次运行时将其回收。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值