首页 新闻 赞助 找找看

急求,怎么理解 javascript不允许直接访问内存中的位置,不能直接操作对象的内存空间?

0
悬赏园豆:100 [待解决问题]

Js高级程序设计里说,Js不能直接操作对象的内存空间,我很疑惑,是因为运行环境不允许,还是Js本身的定义不允许?能结合其他语言解释一下这个观点吗?我是刚入门的小白,请各位大神多多指点

形而上的小鱼的主页 形而上的小鱼 | 初学一级 | 园豆:24
提问于:2016-11-25 20:26
< >
分享
所有回答(4)
1

这些高级语言基本都屏蔽了对内存的显示操作。比如.net,java,python等。你只能对对象进行操作间接的控制内存。而内存的申请回收都交由语言框架完成。

Daniel Cai | 园豆:10424 (专家六级) | 2016-11-25 20:54
0

一些带GC的语言都会自己去管理对象,而像C/C++这种是可以直接操作对象的内存的,但是需要自己手动去delete的,当然,现在智能指针用的也很方便

jello chen | 园豆:7306 (大侠五级) | 2016-11-25 23:48
1

      首先,js语言本身定义确实不允许,其次,你考虑js运行环境,是用在浏览器上,浏览器一般情况也不能访问内存,不然,你想像一下,浏览器可以访问读写电脑上的内存,那将是多么恐怖的事儿(随便写一个小程序就可以控制你电脑,拿到你电脑上所有的东西了。)。

    作为一门高级语言,JS并不像低级语言C/C++那样拥有对内存的完全掌控。JS中内存的分配和回收都是自动完成,内存在不使用的时候会被垃圾回收器自动回收。

  1. 内存分配:当 申明变量、函数、对象的时候,系统会自动为他们分配内存
  2. 内存使用:即读写内存,也就是使用变量、函数等
  3. 内存回收:使用完毕,由垃圾回收自动回收不再使用的内存。
林小白_ | 园豆:197 (初学一级) | 2016-11-28 17:37
-2

我觉得你首先应该看一下堆内存和栈内存的概念

var a

假如有个变量名a,如果a的值为基本数据类型(Undefined、Null、Boolean、Number 和 String)。则是直接把值赋给变量a(如1,“12”等),并存储在堆内存中。

如果a的值为引用数据类型,则需要先创建一个栈内存,然后将a的值存到栈内存中,将栈内存的地址赋给变量a。

这个不是一句两句能说明白的,所以我觉得你应该先了解基本类型、引用类型、堆内存、栈内存等概念,希望能帮到你

dongxiaolei | 园豆:236 (菜鸟二级) | 2017-03-20 13:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册