变量、作用域、内存---part1

js语言的一大特点就是“软”变量,js变量松散决定了其实var只是声明了变量,只是在内存中给变量开辟了空间而已,这个特色从某种角度来看是非常有趣而强大的但是又特别容易产生问题
我们之前在讲变量的时候提到了基本类型和引用类型,这次我们回去深刻的讨论一下两者之间有什么区别,基本类型是指的简单的数据段,而引用类型则是多个数据段组成的对象;基本类型是“栈”,先进如栈内的变量最先被释放掉(内存中)。引用类型是“堆”,所有的引用类型内存中需要单独给开辟一个内存空间去存储。“栈”只是“堆”中数据的索引而已,js不允许直接访问内存中的位置,也就是说不能直接操作内存空间

画了一个很丑的图,大家凑合着看
定义基本类型和引用类型的方式是相似的,创建一个变量并且为该变量赋值,当这个值保存到变量中去的时候,对不同类型的变量的操作是完全不一样的,对于引用类型我们可以为他添加熟悉和方法,也可以删除属性和方法

上面是一个简单的引用类型

我给引用类型加了一个属性叫“name”,这个属性使用key=value的形式写出来的。key值是“name”,value是“jerry”

我又给引用类型添加了一个方法,方法名字叫“sayName”,方法的用处是alert出来自己的名字,这个this.name前面的this指向的是方法的环境本身,如果这里比较抽象没有关系我们接下来会用很大的篇章去讲解this的用法

我调用了这个引用变量中的方法
注意如果这个对象不被手动的销毁或者关闭当前页面,变量中的属性一直存在着,这个特性只有引用变量存在,普通变量保存不下来任何的属性

我们创造了一个普通变量

尝试给创造出来的obj赋值一个“a”属性,但是当我们赋值完了之后二次查看a属性的时候发现a属性并没有被保留下来(undefined)
这几章的概念性的东西比较多,我尽量分成5到6章去讲完,细致的给大家过一遍

转载于:https://juejin.im/post/5d0b833de51d45775f516a77

猜你喜欢

转载自blog.csdn.net/weixin_33936401/article/details/93181530