摘要:引子今天同事聊天群里发现了一道面试题基础,但答案基本没有几个能答对并且理解的很透彻的。但是此时这个内存区并没有被回收因为变量的指针依然指向它。并且因为之前就声明了属性所以该内存区增加了属性。那么属性指向哪儿呢它的返回值就是的内存区。
引子
今天同事聊天群里发现了一道面试题(js基础),但答案基本没有几个能答对并且理解的很透彻的。
问题var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x); console.log(b.x);
先不说答案,可能有些人已经答错了~
错误的答案这多简单!JS赋值运算右结合!那就分开算呗!
a = {n: 2} a.x = a
然后错误的答案就这么产生了,a.x = {n: 2}
正解其实这道题看似简单但还是有一些绕,我依稀记得高中数学老师那句经典的口头禅!
遇到难题:画图啊!
好吧,这句话可能我会受用一辈子,同时也送给看这篇文章的同学,希望能给你们编程带来一些新的思路。
var a = {n: 1}; var b = a;
画图
这句话也是关键所在
a.x = a = {n: 2};
画图
根据js引擎语法解析,会先去从左到右寻找有没有未声明的变量,如果有就把该变量提升至作用域顶部并声明该变量。那么恭喜js引擎他找到a.x这个属性没有声明,那么他会在{n: 1}这个内存区声明一个x属性等待赋值!
语法解析完成后,开始进行运算(ps:赋值运算),首先将a变量的指针指向了一个新的内存区{n: 2},那么a变量脱离了对内存区{n: 1}的引用关系。
但是此时{n:1 }这个内存区并没有被GC回收因为b变量的指针依然指向它。并且因为之前就声明了x属性所以该内存区
增加了X属性。那么X属性指向哪儿呢?a.x = a = {n: 2}它的返回值就是{n: 2}的内存区。
如下图:
那么根据图上可得:
a.x 不存在,故: => undefined(ps:因为JS的缺陷这里应当报个错啥的~ Undefind reference)
b.x => {n: 2}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/81737.html
摘要:值类型中值的类型可简单分为三类,即基础类型复杂类型特殊类型。复杂类型是指即广义的对象类型,可由多个简单类型的值的合成,可以看作是一个存放各种值的容器。值类型赋值举例引用类型赋值举例 JS值类型 JS中值的类型可简单分为三类,即基础类型、复杂类型、特殊类型。ES5中有6种数据类型:null,undefined,number,string,boolean,object。复杂类型是指obje...
摘要:先说下这个老话题连续赋值例结果是什么这句简单,而这句呢答案是,变成了全局变量了这是实际执行顺序未使用声明,所以变全局变量了例很早以前的面试题目了,相信很多人知道答案,考点词法分析执行顺序运算符优先级等这是我理解的实际执行顺序我是这么猜想的自 先说下这个老话题:连续赋值 例1: function a(){ var o1 = o2 = 5; } a(); console.l...
摘要:不过让流行起来的原因应该是是目前所有主流浏览器上唯一支持的脚本语言。经过测试,数字字符串布尔日期可以直接赋值,修改不会产生影响。再考虑对象类型为或者的情况。对于结果声明其类型。判断对象的类型是还是,结果类型更改。 转载自我的个人博客 欢迎大家批评指正 1. 第一个页面交互 这里最需要学习的老师的代码中,每一部分功能都由函数控制,没有创建一个全部变量。且最后有一个函数来控制执行代码...
摘要:最近发现很多同学的博客里都会解释连续赋值问题,各种概念辈出,特别是对于不理解的同学来说,更加一头雾水,我这里做个简单解释,也许不懂的一看就明白了。 最近发现很多同学的博客里都会解释js连续赋值问题,各种概念辈出,特别是对于不理解的同学来说,更加一头雾水,我这里做个简单解释,也许不懂的一看就明白了。 先抛出一个问题: var a = {c:1} //第一步 var b =...
摘要:值类型基本类型和栈内存值类型也称为原始数据或原始值这类值存储在栈内存中基本类型的值不可以修改。目前中的基本类型一共有六种。堆的使用规则当创建数组时,就会在堆内存中创建一个数组对象,并且在栈内存中创建一个对数组的引用。 值类型(基本类型)和栈内存 值类型也称为原始数据或原始值(primitive value).这类值存储在栈(stack)内存中, 基本类型的值不可以修改。每当我们定义一个...
阅读 1704·2021-11-24 10:18
阅读 2148·2021-11-18 13:20
阅读 2308·2021-08-23 09:46
阅读 922·2019-08-30 15:56
阅读 2809·2019-08-30 15:53
阅读 709·2019-08-30 14:22
阅读 448·2019-08-29 15:34
阅读 2498·2019-08-29 12:14