内存管理与内存泄漏思考题

发布于 2022-10-03 22:14:37 字数 2030 浏览 86 评论 0

1、

var a = 20;
var b = a;
b = 30;

// 这时a的值是多少?

20

2、

var a = { name: '前端开发' }
var b = a;
b.name = '进阶';

// 这时a.name的值是多少
进阶

3、

var a = { name: '前端开发' }
var b = a;
a = null;

// 这时b的值是多少
{ name: '前端开发' }

4、

var a = {n: 1};
var b = a;
a.x = a = {n: 2};

a.x 	// 这时 a.x 的值是多少
b.x 	// 这时 b.x 的值是多少

解析:

关键在 a.x = a = {n: 2};。.运算符高于 = 运算符。所以js引擎先执行 a.x,因为此时 a = {n : 1},所以 a.x 为 undefined 并且 a 和 b 此时等于都指向的是 {n:1,x:undefined}。

执行了 . 运算符后开始执行 = 运算符,js 是从右到左,所以先把 {n:2} 的引用给 a,此刻:

a: {n: 2},
b: {
    n: 1,
    x: undefined
}

再把引用值 a 赋给 a.x(因为 a.x 的 . 运算符已经运算过了,所以这里的 a.x 可以理解为就是一个普通的标识符,并且这标识符原本的值是 undefined),就等于把 {n: 2} 的引用赋值给了这个标识符。此时:

b: {
   n: 1,
   x: {
       n: 2
   }
},
a: {
    n: 2
}

所以此时

console.log(a.x); // undefined
console.log(b.x); // {n: 2}

5、

从内存来看 null 和 undefined 本质的区别是什么?

  1. 值 null 是一个字面量,它不像 undefined 是全局对象的一个属性。
  2. null 值表示一个空对象指针,指示变量未指向任何对象,理解为尚未创建的对象比较好理解。undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。

根据用途来理解第二点:

对于 null:

  1. 作为函数的参数,表示该函数的参数不是对象。(bind 的柯里化使用)
  2. 作为对象原型链的终点。Object.getPrototypeOf(Object.prototype) // null
  3. 如果定义的变量在将来用于保存对象,那么最好将该变量初始化为 null,而不是其他值。
  4. 当一个数据不再需要使用时,我们最好通过将其值设置为 null 来释放其引用,这个做法叫做解除引用。(解除引用的真正作用是让值脱离执行环境)

对于 undefined:

  1. 变量被声明了,但没有赋值时,就等于 undefined。
  2. 调用函数时,应该提供的参数没有提供,该参数等于 undefin ed。
  3. 对象没有赋值的属性,该属性的值为 undefined。
  4. 函数没有返回值时,默认返回 undefined。
var i;
i // undefined

function f(x){console.log(x)}
f() // undefined

var  o = new Object();
o.p // undefined

var x = f();
x // undefined

注意:

  1. typeof null // Object 历史遗留问题。
  2. null == undefined // true undefiend 其实派生与 null。
  3. 对于尚未声明过的变量,我们只能执行一项操作,即使用 typeof 操作符检测其数据类型,使用其他的操作都会报错。(如 var i 的 i)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

猫腻

暂无简介

文章
评论
27 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文