学习js先把内存管理想清楚

对于任何语言来讲,不管他们是如何定义自己语言的规则,目的只有一个,那就是操作内存数据(如何从内存里取数据,如何操作取出来的数据,然后如何把操作后的数据放进去),js虽然是弱类型的语言(在内存开辟的变量类型归属会根据使用情况的变化而变化),但万变不离其宗,那就是怎么也逃不出值类型和引用类型两大数据类型,这两大类型有自己的规则,那就是不能互相变换,但这里有个问题可能大家觉得很奇怪:

String.prototype.name="http://qijifu.com";
var val=23;
alert(val.name);弹出“http://qijifu.com

(注:下面说的类型就是引用类型和值类型的区分)

有些人可能就要问为什么作为值类型的val变量可以像对象一样的形式来访问呢,是不是它就转成引用类型的数据了呢?!那我来告诉你,这里val根本就没有变它的类型,说过每个语言它都有自己的规则,这个规则就是程序在执行val.name的时候,它会瞬时地在栈中开辟一块空间放类似如下代码(val=new Number(),val.name),记住哦,这里说的是瞬时,运行完这行代码后,立即销毁创建的引用对象,这时val堆空间就又回到指向原来的值类型的数据了,所以后面你以为可以通过如下val.age=23; alert(val.age);是错误的,因为到这里已经是值类型数据23了,23当然不能开辟属性值了。

如果你还不好理解的话,送上图一张:

 

对照图去理解上面讲的,后续会继续分析js是如何围绕内存定义自己的规则进行操作内存数据的!!

总之记住一句话,我们学的是语言的规则,内存的数据是任何语言的目标对象(所有语言基本差不多),唯一的差别是规则

posted @ 2013-05-21 14:22  无知者无畏吧  阅读(297)  评论(0)    收藏  举报
友情链接:微群相册人生就是每一个精彩的瞬间