Javascript学习笔记04 ——变量,作用域,内存问题

基本类型值:表示简单的数据段,undefined null string number boolean 为基本类型,可以操作保存在变量中的实际的值。

引用类型:表示多个值构成的对象。保存在内存中。因为js不能直接访问内存,所以只能方位内存的引用。

 var person=new object()

person.name="john"

alert(person.name);//输出john


var person="john"

person.name="Bill"

alert(person.name)//输出错误

只能给引用类型添加属性


复制变量值(与C语言类似)

int num1=5;

int num2=num1;

那么num1,2的值都是5.


当变量为引用类型的时候,复制一个变量到另一个变量中,那么复制过去的只是一个引用,然而两个变量指向同一个引用,指向内存中同一个地址。一个改变另一个也将改变。

var person1=new object();

person1.name="wang";

var person2=person1;

person2.name="zhang";

alert(person1,name);//输出zhang


参数的传递是按照值类型传递的。基本类型的参数传递就和基本类型值的变量赋值一样,同理引用类型也是一样。

例子:

function addten(num)

{

num=num+10;

return num;

}

var a=30;

var result=addten(a);

alert(a)//30

alert(result)//40

在调用addten函数的时候a的值直接付给num,等函数执行完之后返回给result。然而a的值并没有任何改变。


function change(obj)

{

obj.name="wang";

obj=new object();

obj.name="zhang";

}

var person=new object();

change(person);

alert(person.name);//wang

原理:在执行change函数的时候,person吧引用付给了obj,而obj吧引用指向的内存地址的name属性改变为wang,接着obj被实例化new object(),相当于吧obj指向了内存中的其他地址,接着为这个新的地址name属性赋值,其实对原来的obj地址已经没有任何关系了,等到函数执行完,obj开始的地址的属性发生了变化,新付给的地址呗销毁,实际上也就是person的属性发生了变化。


所以参数传递的时候只不过基本类型赋值的是变量的值,引用类型赋值的是变量指向的地址。


执行环境:定义了变量和函数有权访问的其他数据,每个执行环境都有一个与之对应的变量对象,环境中定义的所有的变量和函数都保存在这个对象当中,但是程序员无法访问它。

全局执行环境是最外围的执行环境,一般是window。

每个函数都有自己的执行环境,当执行这个函数的时候函数的环境会被推入到一个环境栈中,执行完成后吧环境返回给原来的执行环境中,


延长作用域链:一般执行环境分为全局和局部(函数)。可以再作用域的前段临时增加一个变量对象,该变量对象会在代码执行完被移除,具体的来说当代码执行到try catch语句以及with语句的时候作用域链会加长。

没有块级的作用域。

例如:

if(true)

{

var chars="wang"

}

alert(chars);//wang


for(int i=0;i<10;i++)

{

dosomething(i);

}

alert(i)//i=10

在这种情况下,快中声明的变量都是当前的变量对象中。


声明变量:

var声明的变量会自动的添加到最近的环境中,如果声明变量的时候没用使用var,那么变量会自动的添加到全局的环境中。

例如:

function add(num1,num2)

{

var sum=num1+num2;

return sum;

}

var result=add(10,20)//result=30

alert(sum)//error


如果吧sum定义为

sum=num1+num2

不适用var声明的话 sum为全局变量,那么alert(sum)返回30

在这个函数执行完之后sum依然可以使用。


Js的垃圾回收机制:

在c 和c++中开发人员需要跟踪内存使用情况,然后手动的释放内存。但是js可以自动的释放。其操作就是找出不用的内存然后释放。js的垃圾回收器会在一个时间间隔内自行该操作。

主要的方法分为标记清除,引用计数。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值