堆栈内存及闭包作用域(GO,VO,AO)(二)

1.  NaN + [ ] 为什么转化为 字符换 “ NaN ”:

空数组在隐式转换的时候,会先转换为字符串 ( [ ] -> ‘ ’ ),再转换为数字,但是在转换为数字的过程中遇见 + 加号,所以就变成字符串拼接了。

2. 10 + undefined  ->  数字: NaN:

undefined 转换为数字是NaN ,10 + NaN 是NaN;NaN 加任何数都是 NaN

3. 对象转字符串,先调用 valueof,再调用 toString

4.  任何数据类型都可以转换为字符串,对象在转换为字符串的之前需要先判断类型

堆栈内存(VO,GO):

. 栈内存:提供代码的执行环境,堆内存:存放全局的属性和方法

内容: 堆(heap)栈(Stack)内存,执行环境栈(ECStack),执行上下文(EC),GO,VO,AO

1. 理解:

JS 之所以能够在浏览器中运行,是因为浏览器给 JS 提供了执行的环境 ->  栈内存

栈内存: Execution Context Stack,Context:上下文,也是环境,叫做执行环境栈,

就是浏览器会在计算机内存中分配一块内存,专门用来供代码执行的栈内存

2. 每打开一个网页都会开辟一块内存,都会形成一个全新的执行环境栈

全局对象(GO):

3. 浏览器会提供很多供我们调用的属性和方法(isNaN,parseInt),会放在一个位置叫全局对象

4. 全局对象  GO (Global Object):浏览器把内置的一些属性和方法放到一个单独的内存中,这个内存就叫做,堆内存(heap)

5. 任何内存都有内存地址,内存地址都是16进制的

6. 在浏览器端,会让 window 指向 GO,所以浏览器端的 window  指向的就是全局对象

7. 在 node 中指向的是 global

8. 栈内存:提供代码的执行环境,堆内存:存放全局的属性和方法

作用域:

1. 每一块代码都有自己执行所在的环境(函数里面的代码执行的时候也有一块自己的执行环境)

执行上下文:(EC)(Execution Context)

1.  执行上下文:每一个区域中的代码,自己所处的执行环境;就是代码自己执行所在的环境

2.  跟作用域有些相似

3.  全局执行上下文  EC(G)

4.  函数中的代码都会在一个单独的私有的执行上下文中处理

5. ES6 可能会形成 块级执行上下文

形成的 执行上下文,会进入到栈内存中执行,叫做进栈

执行完代码,肯能会把形成的上下文出栈释放,全局的不会出栈

变量对象 VO (Variable Object):

1. VO : 在当前的上下文中,用来存放创建变量和值的地方

2. 每一个执行上下文中都会有一个自己的变量对象,函数的私有上下文叫做AO

3. VO(G)全局变量对象,存放全局对象

 AO 也是变量对象,只不过他叫活动变量对象(Activation Object):

1. VO 的一个分支而已

赋值的步骤:

1.  创建一个值

  • 基本数据类型的值,都是直接存在栈内存中的
  • 引用数据类型的值,是先开辟一个堆内存,把东西存储进去,最后把地址放在栈中供变量关联使用

2.  创建一个变量

3.  让变量和值关联在一起

4.  所有的指针赋值,都是关联指向

引用数据类型:

 题:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值