zoukankan      html  css  js  c++  java
  • 一道阿里笔试题引发的思考

    //情况1
    let a={n:1} let b=a; a.x=a={n:2}; console.log('a',a); //{n:2} console.log('b',b); //{n:1,x:{n:2}} //情况2 let a={n:1} let b=a; a=a.x={n:2}; console.log('a',a); console.log('b',b);

    这是一道阿里的笔试题,自己最开始碰到的时候也是一脸懵逼,然后看了各种人的解释,貌似是懂了,但是别人一问,我又傻逼了,总感觉没有屡清楚

    最近呢看到B站上一个老师讲解这道题目的时候,通过画图分析堆栈呢,答案是给出来了,但是自己分析了一下,感觉不太对

    //大佬的解释是,对于连等操作,是从左往右的,并且赋值操作呢,是分三步来的,1,定义变量,2,创建值,3,将二者关联起来,所以大佬的逻辑是,

    1,a.x={n:2},此时b=a,所以b={n:1,x:{n:2}} a={n:2} 从结果看,是对的,但是如果把题目换成情况二呢

    此时,如果从左往右算的话,a={n:2,x:a}  b={n:1}

    但是事实上,上面两种情况的结果是一样的

    后面又看了别人得到解释,是这样的,这里涉及到运算符的优先级问题具体优先级可以参考MDN上的一张表(https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

    点运算符权重是19,而赋值权重是3,也就是说点操作符优先级高

    1,a.x 结果就是a=b={n:1,x:undefined}

    2,连等,从又向左,这样,两种情况的结果就是一样的了。

    a.x其实已经指向了堆里面的一个地方了,所以,当a.x={n:2}时,通过作图,是很容易得出结论的

  • 相关阅读:
    vfs:结构体对象
    vfs:open.c 源码学习
    Linux direct io使用例子
    GPU安装小结
    tensorflow scope的作用
    tensorflow 一维卷积 tf.layers.conv1()使用
    tensorflow 的tf.where详解
    tensorflow 的tf.split函数的用法
    tensorflow 添加一个全连接层
    tensorflow 计算均值和方差
  • 原文地址:https://www.cnblogs.com/ysla/p/13128602.html
Copyright © 2011-2022 走看看