js 不同类型在内存中的保存方式

2018-09-20  本文已影响0人  余带盐

例如number类型:var foo=5;,在内存中并不是直接保存了一个数字,而是以字典的形式保存了以下内容

{
 foo: {
   [[value]]: 5
   [[writable]]: true
   [[enumerable]]: true
   [[configurable]]: true
 }
}

所以变量foo的值并不是5,而是上面这个字典的地址,也就是基本类型也是使用的引用

例如

var foo=function () {}

引擎将会把function () {}函数体单独保存在内存中,再将函数体的地址赋给foo的value,如下

{
 foo: {
   [[value]]: 函数的地址
   ...
 }
}

所以foo保存了字典的地址,字典的value属性保存了函数的地址

由于foo仅保存函数字典的地址,所以这个地址可以赋给其他任意变量,而变量又可以属于不同上下文,所以函数可以在不同上下文中执行。
而this就是确定函数所在上下文的。

引用:JavaScript 的 this 原理

上一篇 下一篇

猜你喜欢

热点阅读