`
w2363536460126
  • 浏览: 2306 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

js围绕内存的规则定义

    博客分类:
  • js
阅读更多

  前面写的一篇“值类型、引用类型与基本包装类型之我见”的博文里提到js就是围绕内存来展开自己语言规则的,这也是我一直在强调的东西,所以建议先看我那篇文章理解思想后再来看我下面的内容,我说的东西注重是思想。

 

  学任何语言开始我们都是开始学什么语法、变量、表达式啊什么的,其实你想过没有,所有这些不过就是要教你接受这门语言定义出的关键字以及这些关键字它所代表的意思和规则,因为js是门解释性的语言无需编译,所以它定义的关键字及规则应该比较靠近内存的逻辑,这也是我强调要把握好js内存的管理思想后再去学习js。让我们回顾一下js给我们提供的一些常用的关键字(举几个本文要分析的):var number new function {}等。我前面说过语言定义的规则目的就是为了操作内存,内存操作也就分为:如何在内存开辟空间,如何给开辟的空间给数据,如何取出指定空间的数据。

 

  var的规则是在内存中开辟空间,也就是我们给变量空位子,如:var a;然后接下来就是要给我们的变量a放数据了,内存是根据值类型和引用类型的数据区分存储模式的,这里很关键的是放数据,放的数据是什么类型,怎么放进去,别急,js有自己的规则定义,js专门定义了自己的语言的数据类型,基础类型(undefined null boolean number string,js把定义的这几种类型归到内存中值类型的范畴里面)还有就是object array date regexp function(js把定义的这几种类型归到内存中引用类型的范畴里面),那js是如何来识别数据的类型的呢,开始阶段js跟其它高级语言没什么区别,比如:a=23;这时a的数据就是number类型(它归为内存里的值类型,就以值类型的方式在内存里存储)。js除了这样的普通方式外还定义了许多自己的规则,鉴于内存中引用类型数据的特殊性(伸缩性,就是所占空间可以变大变小,无疑就是数据里面的东西进行增删查改),js为了把这种特殊性归到自己的规则里面来用,所以才衍生出了object array date regexp function这些自己规则里面的引用类型的数据类型,它们各有自己的特色(本文不在这里探讨他们具体的用处,再次强调本文讲的是思想,规则最好去查标准书籍);我这里就拿function和{}这两种引用类型在js规则是怎么反应到内存中简单说一下,var a={} 和function b(){},如果撇开函数定义的特殊关键字"function"和"()"的话它跟普通的对象没什么区别(所以说函数就是加上js函数特殊关键字的特殊对象,其实js定义的那几种自己的引用类型的数据都是对象,只是各自有了自己的规则,由各自的关键字来决定),就是在内存中开辟了一个引用类型的数据(怎么存储看我开头提到的那篇文章,里面有图示),加上了“function”和“()”后,js把它叫函数,它的规则是:调用内存栈里面的变量b后面再加上个(),b();就可以执行它所指的内存堆里面存放的函数体内容了。关于new和{}这两关键字的规则,我会在后续分析,这里面涉及到一个字面量对象的问题,最后还是想提醒大家,我讲的是思想,可能跟你们在书上看到的不是很一样,我说过书上的是叫你们学习它规则的定义,是通过包装的(为什么这么说,我一向认为如果jquery是js的包装库,那我觉得js就是浏览器最底层的包装库,那么既然是库,那必然有包装,包装就是定义的一些概念,一些表达式的规则),怎么去理解,我觉得还是取决于个人

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics