搜索
javascript - 今天看到一段面试代码,有点小问题,请给我一个详细的解答可以吗?
怪我咯
怪我咯 2017-04-11 13:12:15
[JavaScript讨论组]
var a = { n : 1 };
    var b = a;
    a.x = a = { n : 2 };
    console.log( a.x );  // undefined
    console.log( b.x );  // Object { n = 2 }
    

我的想法是这样的:

var a = {
    n : 1,
    x : a = { 
        n : 2       
    }
}

不知道我的想法有没有错误的地方,如有,希望能帮我指出,可以帮我解释下吗?谢谢!

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(10)
ringa_lee

这问题已经有人问过了,还有详细说明
https://segmentfault.com/q/10...

黄舟

分析的文章在这里从一个简单例子来理解js引用类型指针的工作方式

ringa_lee

伊谢尔伦

不懂,等答案了。这东西没事研究行,千万别这么写,否则你老板准开了你!!

PHP中文网

在浏览器上试一下

a
Object {n: 2}
b
Object {n: 1, x: Object}
    n: 1
    x: Object
        n: 2
        __proto__: Object
    __proto__: Object
伊谢尔伦

f12 在控制台执行一下就粗来了

迷茫

var b=a,这句表明b和a指向同一个引用地址,a.x={n:2},表明在这个地址上加上一个属性,因为b也指向这个地址,所以b的值也相应改变。后面a={n:2}重新给a指向一个新的地址

怪我咯

指针和赋值的区别

黄舟

首先程序先预解释 声明了一个变量 var a var b
然后执行程序
第一步 a = { n : 1 } //给 a 赋值了一个地址1111 这个地址1111指向一个堆内存 { n:1}
第二步 b = a;// 是把 地址1111 这个地址赋值给了 b 既a,b指向了同一个地址1111
第三步有一个连等 可以拆分为
a.x = { n : 2 };// a.x 是给地址1111的对象添加了一个属性x:{n:2} ;

a = { n : 2 }; // 这步是把a指向的地址变为2222 了  也就是{n:2}  

console.log( a.x ); // 此时的a = { n:2 } 所以为undefined
console.log(b.x); //此时的b= { n : 1,x : a = { n : 2 }} x指向一个对象 所以为Object {n:2}

阿神

这是我的理解:https://segmentfault.com/a/11...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号