JS TS的内存详解

堆内存:分配是动态且不连续

栈内存:只允许一端操作数据,后进先出,速度快,栈内存适合存放生命周期短、占用空间小且固定的数据

原始类型的数据直接存放到栈内存(原始值)

当我们定义一个原始类型变量的时候,js 会在栈内存中激活一块内存来储存变量的值(原始值)。

当我们更改原始类型变量的值时,实际上会再激活一块新的内存来储存新的值,并将变量指向新的内存空间,而不是改变原来那块内存里的值。

当我们将一个原始类型变量赋值给另一个新的变量(也就是复制变量)时,也是会再激活一块新的内存,并将源变量内存里的值复制一份到新的内存里。

 --栈内存的原始值一旦确认,不可改变

原始值的比较

当我们比较原始类型的变量时,会直接比较栈内存中的值,只要值相等那么它们就相等。

对象引用(Object references

1.当我们定义一个引用类型的变量时,JavaScript 会先在堆内存中找到一块合适的地方来储存对象,并激活一块栈内存来储存对象的引用(堆内存地址),最后将变量指向这块栈内存。

所以当我们通过变量访问对象时,实际的访问过程应该是:

变量 -> 栈内存中的引用 -> 堆内存中的值

2.当我们把引用类型变量赋值给另一个变量时,会将源变量指向的栈内存中的对象引用复制到新变量的栈内存中,所以实际上只是复制了个对象引用,并没有在堆内存中生成一份新的对象。

3.而当我们给引用类型变量分配为一个新的对象时,则会直接修改变量指向的栈内存中的引用,新的引用指向堆内存中新的对象。

 栈内存中的对象引用是可以被更改的(可变的)

对象的比较(Comparison

当我们比较引用类型的变量时,实际上是在比较栈内存中的引用,只有引用相同时变量才相等。

 

对象的深拷贝(Deep copy

浅拷贝对象是不可靠的。对于任何引用类型的变量,都应该使用深拷贝来复制,除非你很确定你的目的就是复制一个引用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TypeScript 中的 declare 关键字用于声明某些变量、函数或类的类型,但并不实际定义它们的实现。这是因为 TypeScript 可以用来编写 JavaScript,而 JavaScript 中的许多变量、函数或类并没有明确定义它们的类型。因此,使用 declare 关键字可以帮助 TypeScript 理解这些 JavaScript 代码的类型。 declare 关键字的使用有以下几种情况: 1. 声明全局变量或函数 在 TypeScript 中,全局变量或函数应该在任何文件中都可以访问。但如果这些变量或函数没有明确定义类型,则 TypeScript 编译器可能无法正确解析它们的类型。因此,使用 declare 关键字可以告诉编译器这些变量或函数的类型。 例如,以下代码声明了一个全局变量 message,并指定它的类型为字符串: ``` declare var message: string; ``` 2. 声明模块 在 TypeScript 中,可以使用 declare 关键字来声明模块的类型。例如,以下代码声明了一个名为 MyModule 的模块,并指定它包含一个名为 myFunction 的函数: ``` declare module MyModule { function myFunction(): void; } ``` 3. 声明类的类型 在 TypeScript 中,可以使用 declare 关键字来声明一个类的类型,而不实际定义它的实现。这通常用于与第三方库集成时,以便编译器知道这些类的类型。 例如,以下代码声明了一个名为 MyLibrary 的类,并指定它包含一个名为 myFunction 的方法: ``` declare class MyLibrary { myFunction(): void; } ``` 需要注意的是,使用 declare 关键字并不会实际生成任何代码,它只是告诉编译器这些变量、函数或类的类型。因此,如果使用 declare 关键字声明一个变量、函数或类的类型,就必须确保在代码中正确地实现它们。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值