美文网首页
JS的一个引用问题的理解

JS的一个引用问题的理解

作者: CRJ997 | 来源:发表于2019-04-03 09:59 被阅读0次

在网上看到了这样的代码:

var a = {n:1};
var b = a;
a.x = a = {n:2};
console.log(a);
console.log(a===b);
console.log(b);

然后输出结果是:

{n:2}
false
{n:1,x:{n:2}}

看了之后感觉很懵啊,就是不太懂为什么会这样子。之后发现是这样的

  • 首先a->{n:1}, b->{n:1}
  • 看下这个语句a.x = a = {n:2}
  1. 根据运算符的规则,那么首先执行a.x,也就是最左侧准备被赋值的对象是{n:1},被赋值的属性是{n:1}这个对象的x,同时{n:1}也是b指向的对象。
  2. 接着执行赋值,从右往左,这时候a->{n:2},然后a.x->a,注意这个时候因为a.x的a还是{n:1}这个对象(因为 . 运算符优先),也就是相当于b.x->a。这时候结果就是{n:1,x:{n:2}}。

另外注意一个点就是,b.x指向的是a,因此修改a的任意属性都会反映到b.x上,同理修改b.x的属性也会反映到a上

相关文章

  • JS的一个引用问题的理解

    在网上看到了这样的代码: 然后输出结果是: 看了之后感觉很懵啊,就是不太懂为什么会这样子。之后发现是这样的 首先a...

  • immer优化react

    React.js性能优化 js中可变数据的问题 互相引用的问题 JS 普通数据类型之间是没有互相引用的问题的,对象...

  • JS高级(第三版)第4章知识点总结

    变量、作用域和内存问题 1.理解基本类型和引用类型的值2.理解执行环境3.理解垃圾收集 变量 1.JS的变量为松散...

  • module

    ES6中函数复用函数封装a.js文件 外部引用 上面的引用存在的问题:引用的名称必须与封装的js中export的名...

  • JS面向对象精要(二)_函数

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(三)_理解对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(四)_构造函数和原型对象

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • JS面向对象精要(五)_继承

    JS面向对象精要(一)_原始类型和引用类型JS面向对象精要(二)_函数JS面向对象精要(三)_理解对象JS面向对象...

  • IE浏览器适配

    1、引用JS文件不执行处理: 问题: 使用 引用的js文件在IE浏览器中不执行 解决方法: 改用 或者 引入...

  • 执行环境、作用域链

    理解基本类型和引用类型 基本类型 点击浏览JS的基本数据类型 引用类型 1.什么是引用类型引用类型的值是保存在内存...

网友评论

      本文标题:JS的一个引用问题的理解

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