资讯专栏INFORMATION COLUMN

一眼看穿

venmos / 3138人阅读

摘要:复制变量值基本类型在复制变量值的时候,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。

这篇文章将梳理下环境,作用域链,变量对象和活动对象,以及内存管理问题。
基本类型和引用类型的值

我们都知道JS中的数据类型有两大类,基本数据类型和引用数据类型,下面从三个方面来解剖他们
①保存方式
基本类型的值是指简单的数据段,引用类型的值是指那些可能由多个值构成的对象。

基本类型

按值访问

可以直接操作保存在变量中实际的值

引用类型

按引用地址访问

保存在内存中的对象,而JS不能不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间,所以说在实际操作过程中操作的是对象的引用,而不是实际的对象。

②复制变量值

基本类型在复制变量值的时候,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。也就是说基础类型的值复制给新变量后,会在栈内存中开辟一个新的地址空间去存储值,原值和复制值参与任何操作都互不影响

引用类型在复制变量值的时候,同样会在栈内存中开辟一个新的地址空间去存储值,只不过,引用类型复制的是指针,原值和复制值的指针指向同一堆内存中存储的值,也就是说着两个变量实际上将引用同一对象,因此改变其中一个变量,就会影响到另一个变量。

③传递参数
先了解一个基本原则,ECMAScript中所有函数的参数都是按值传递的,千万不能觉得在局部作用域中修改的对象会在全局作用域中反映出来,就说明参数是按引用传递的

根据这个原则,如果参数值是基本类型的,在函数内部修改值,并不会影响到函数外部的值,但如果是引用类型的,参数依旧是值传递,只不过传递的是栈内存的地址值,因此函数内部的修改会影响到函数外部的值。
下面看一个

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99857.html

相关文章

  • 一眼看穿

    摘要:没错,中的继承正如你所理解的一样,也是成对出现的。由于中的函数没有签名,因此无法实现接口继承,只支持实现继承,而继承的主要方式,是通过原型链实现的,要理解原型链,首先要知道什么是原型,不懂的小伙伴,可以看这篇博文一眼看穿 继承 我们知道JS是OO编程,自然少不了OO编程所拥有的特性,学习完原型之后,我们趁热打铁,来聊聊OO编程三大特性之一——继承。 继承这个词应该比较好理解,我们耳熟能...

    Amio 评论0 收藏0
  • 一眼看穿

    摘要:说白了就是可以在构造函数上调用属性来指向原型,从而创建那个对象实例的原型对象使用原型有什么好处呢使用原型的好处是可以让所有对象实例共享它所包含的属性和方法。转晕了麽是不是超级乱 原型 原型还是比较重要的,想单独抽出一章来细说,说到原型,那么什么是原型呢? 在构造函数创建出来的时候,都有一个prototype(原型)属性,这个属性是一个指针,系统会默认的创建并关联一个对象,这个对象就是原...

    hqman 评论0 收藏0
  • 一眼看穿

    摘要:故事缘由一天,一哥们说,骚年,我发现撸码一段时间后,回看以前自己写的代码,水到掉渣了,我们来重构吧我想,既然要重构,逼格肯定要比之前的高才行啦,等等 故事缘由 一天,一哥们说,骚年,我发现撸码一段时间后,回看以前自己写的代码,水到掉渣了,我们来重构吧!我想,既然要重构,逼格肯定要比之前的高才行啦,等等

    baukh789 评论0 收藏0
  • 一眼看穿

    故事缘由 对象这个词,在我们

    Loong_T 评论0 收藏0
  • 一眼看穿

    摘要:,返回对象的字符串表示。布尔操作符逻辑非号表示返回一个布尔值,可以应用于中的任何值规则如果操作数是一个对象,返回如果操作数是一个空字符串,返回如果操作数是一个非空字符串,返回如果操作数是数值,返回如果操作数是任 前段时间忙,好久没更新了,继续梳理基础知识这期总结的是JS的基本概念 标识符 所谓的标识符是指变量,函数属性的名字,或者函数的参数 第一个字符必须是一个字母,下划线(_)或者一...

    jsdt 评论0 收藏0

发表评论

0条评论

venmos

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<