美文网首页
js里类型:按值传递和按引用传递

js里类型:按值传递和按引用传递

作者: 阿凯_8b27 | 来源:发表于2019-07-16 14:32 被阅读0次

avascript的数据类型分为基本类型和引用类型(对象)。基本类型分为如下几种:

数字字面量

字符串字面量

布尔字面量

undefined

null

引用类型分为如下几种

new Object()

new Array()

new RegExp()

new String()

new Number()

new Bollean()

new 自定义对象()

通过new的方式生成的对象

{},[],正则字面量。

var a = 'abc'

var b = 123

var c = true

var d = undefined

var e = null

var f = {

 n: 'test'

}


f.n = null;

js引擎会在下一个垃圾回收节点将它回收掉


var a = {

 b: 123,

 c: 'abc',

 d: true,

 e = null,

 f = {

   h: 'test',

   j: {

     k: 567    }

 }

}

函数的内存使用

functionsay(){  

 var a = '测试'  var b = {

   c: 123  }

}

[[Socpes]]的属性,查看关于闭包的时候  

functionsay(){  var a = '测试'  var b = {

   c: 123  }

}

say();




String;

按值传递,互相不影响

Number;

按值传递,互相不影响

Boolean;

按值传递,互相不影响

Array

按引用传递,对当前内存指向同一地址:

解决方案:
1.采用es6中Set进行解耦(浅拷贝)

2.使用JSON进行解耦(深拷贝)

3.使用slice函数进行解耦(浅拷贝)

4.利用拓展运算符解决(浅拷贝)

const a2=[...a1]

const[...a2]=a1;

Object

按引用传递,对当前内存指向同一地址

采用JSON (深拷贝)
Object.assign()克隆(浅拷贝)
Object.create() 创建(浅拷贝)

浅拷贝只针对单层结构的数组或对象,对于复杂结构的需要采用深拷贝

更多深拷贝 ,可以采用jquery,lodash等类库实现
或者自己实现,对结构一层一层遍历

function copy (obj) {

        var newobj = obj.constructor === Array ? [] : {};

        if(typeof obj !== 'object'){

            return;

        }

        for(var i in obj){

           newobj[i] = typeof obj[i] === 'object' ?

           copy(obj[i]) : obj[i];

        }

        return newobj

}
堆是动态分配内存,内存大小不一,也不会自动释放。栈是自动分配相对固定大小的内存空间,并由系统自动释放。
按引用传递的数据 再堆里面存储执行栈的指针

相关文章

  • JS是按值传递还是按引用传递?

    JS是按值传递还是按引用传递? 按值传递 VS. 按引用传递 探究JS值的传递方式 按共享传递 call by s...

  • 第四题

    写出输出值,并写出原因 按值传递和按引用传递 函数的参数的按值传递的 js之所以有这样设计,是因为:按值传递的类型...

  • js里类型:按值传递和按引用传递

    avascript的数据类型分为基本类型和引用类型(对象)。基本类型分为如下几种: 数字字面量 字符串字面量 布尔...

  • 基本类型和引用类型作为函数参数传递

    基本类型是按值传递的: 引用类型也是按值传递的: 证明引用类型是按值传递的例子:

  • 方法参数

    一、参数传递 1.参数传递有两种类型:按值传递和按引用传递。 2.按值传递指变量使用的是参数传递的值,而按引用传递...

  • Java调用方法时值传递的理解

    Java中方法调用时,没有按引用传递这个说法,只有按值传递。基本类型数据的传递和引用类型数据的传递,根本上都是按值...

  • JS按值传递和按引用传递

    1. 按值传递 将参数值传递给过程的方式,使过程访问到变量的复本。结果,过程不可改变变量的真正值,传递的是变量...

  • Java中的参数传递

    为了便于理解,会将参数传递分为按值传递和按引用传递。按值传递是传递的值的拷贝,按引用传递传递的是引用的地址值,所以...

  • 参数按值传递

    参数如果是基本类型是按值传递,如果是引用类型按共享传递。 1、按值传值 2、共享传值 共享传值: 按引用传递是传...

  • 函数的参数传递

    按值传递 按值传递:修改形参的值并不会影响实参。但如果传递的是引用类型,形参的值也会影响实参。按引用类型传递:修改...

网友评论

      本文标题:js里类型:按值传递和按引用传递

      本文链接:https://www.haomeiwen.com/subject/oiqmjftx.html