搜索

首页  >  问答  >  正文

javascript - z=z=z++里的执行过程

var z = 0;
z=z=z++;
alert(z);

弹窗是0,为什么?

var z = 0;
z++;z=z;
alert(z);

的区别?

滿天的星座滿天的星座2702 天前985

全部回复(6)我来回复

  • 高洛峰

    高洛峰2017-07-05 10:52:36

    好奇你这是为了做题还是你在哪个开源项目的代码中看到过作者使用这样的书写方式, 如果是为了做题或笔试, 建议不要考虑这样的学校或公司. 因为此题毫无意义, swift3甚至去掉了++操作符, 人生短暂, 把时间浪费在让人confusing或容易出错的语法特性上不值.

    回复
    0
  • 大家讲道理

    大家讲道理2017-07-05 10:52:36

    两个点:

    1. a = a++ 先赋值,后自增

    2. 赋值表达式是有返回值的,简称为表达式的值

    z=z=z++; 

    相当于将「z=z++」表达式的值赋值给z,而「z=z++」的值等于「z++」,「z++」先使用z当前值,后自增

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-07-05 10:52:36

    后置自增:
    n++这样的表达式会返回一个n原始值的副本,然后将n原始值++
    n = n++ 后置自增运算符的优先级高于赋值
    所以=右侧会先将n自增并返回n的原始值副本
    然后进行赋值操作 将n的原始值赋值给n,所以n的值不变

    回复
    0
  • 阿神

    阿神2017-07-05 10:52:36

    z++是个表达式,表达式的结果还是z,所以 z=z++相当于z=z 啥也没做,
    你要了解下 z++的逻辑是先返回变量的值,然后才自增。

    或者你用++z,前自增是先自增,然后返回自增后的结果

    回复
    0
  • 我想大声告诉你

    我想大声告诉你2017-07-05 10:52:36

    等价于

    a=z++;
    z=a;
    z=z;

    回复
    0
  • 阿神

    阿神2017-07-05 10:52:36

    ++ 和= 运算顺序的问题 建议看一下 运算 赋值的优先级

    回复
    0
  • 取消回复