文章博客

技术团队文档示例


【js】引用和操作符优先级

<h4>以下输出什么</h4> <h3>题目一:</h3> <pre><code>var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x) console.log(b.x)</code></pre> <p>执行: 1.先执行 a.x 2.a = {n:2} ;//从右向左赋值 3.a.x ={n:2}; //赋值操作</p> <h4>解答思路:</h4> <p>1、优先级。.的优先级高于=,所以先执行a.x,堆内存中的{n: 1}就会变成{n: 1, x: undefined},改变之后相应的b.x也变化了,因为指向的是同一个对象。 2、赋值操作是从右到左,所以先执行a = {n: 2},a的引用就被改变了,然后这个返回值又赋值给了a.x,需要注意的是这时候a.x是第一步中的{n: 1, x: undefined}那个对象,其实就是b.x,相当于b.x = {n: 2}</p> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/afa9d8630d07d21692460eba94aa637e?showdoc=.jpg" alt="" /> <img src="https://www.showdoc.cc/server/api/common/visitfile/sign/e690db3f0493773341e3025d0412c819?showdoc=.jpg" alt="" /></p> <h3>题目二:</h3> <pre><code>var a = { x: 1 }; var b = a; a = a.x = { x: 1 }; console.log(a); //{x:1} console.log(b);//{x:{x:1}}</code></pre> <h5>解题的两个关键点:</h5> <p>1.操作符的运算优先级问题;.的优先级高于赋值语句;</p> <pre><code>var a = { x: 1 }; var b = a;</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/2efebb11e08a5dbc69b3011373a2d806?showdoc=.jpg" alt="" /></p> <pre><code>a.x = { x: 1 }; a = a.x;</code></pre> <pre><code>当执行a.x = {x:1}</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/70bf5d15a47e9b7d03a3a0297d62621c?showdoc=.jpg" alt="" /></p> <pre><code>a = a.x;</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/50db94ee87dba9a16be3d25462bb3b29?showdoc=.jpg" alt="" /></p>

页面列表

ITEM_HTML