Javascript Typescript在执行方法之前更改变量值

Javascript Typescript在执行方法之前更改变量值,javascript,typescript,Javascript,Typescript,下面的代码执行底线 this.greetingWidgets[index]。上一个位置=this.greetingWidgets[index]。当前位置 在运行上面调用的方法之前,有人能解释一下原因吗 console.log('This is previous height & width ') previous_object_coordinates = this.old_coordinates(previous_position) console.log('Old

下面的代码执行底线

this.greetingWidgets[index]。上一个位置=this.greetingWidgets[index]。当前位置

在运行上面调用的方法之前,有人能解释一下原因吗

 console.log('This is previous height & width ')

    previous_object_coordinates = this.old_coordinates(previous_position)
    console.log('Old coordinates')
    console.log(previous_object_coordinates)

    console.log('New coordinates')
    current_object_coordinates = this.new_coordinates(current_position)
    console.log(current_object_coordinates)

    console.log('Pop off coordinates')
    pop_coordinates = this.pop_coordinates(previous_object_coordinates, current_object_coordinates)
    console.log(pop_coordinates)

    console.log('Push in coordinates')
    push_coordinates = this.push_coordinates(current_object_coordinates, previous_object_coordinates)
    console.log(push_coordinates)


    this.greetingWidgets[index].previous_position = this.greetingWidgets[index].current_position

  
这些是上面提到的方法

  push_coordinates(arr1, arr2) {
    var arr3 = arr1.concat(arr2).filter(val => !(arr1.includes(val) && arr2.includes(val)))
    return (arr3)
  }

  pop_coordinates(previous_object_coordinates, current_object_coordinates) {
    var pop_coordinates = []
    pop_coordinates = previous_object_coordinates.filter(value => current_object_coordinates.includes(value))
    return (pop_coordinates)
  }

  new_coordinates(current_position) {
    var new_height_span = current_position.height
    var new_width_span = current_position.width
    var current_object_coordinates = []
    if (new_height_span) {
      for (var x = new_height_span; x > 0; x--) {
        for (var y = new_width_span; y > 0; y--) {
          var cordinates = Number(x + '.' + y)
          current_object_coordinates.push(cordinates)
        }

      }

      current_object_coordinates = [...new Set(current_object_coordinates)]


      for (var x = new_height_span; x > 0; x--) {
        for (var y = new_width_span; y > 0; y--) {
          var cordinates = Number(x + '.' + y)
          current_object_coordinates.push(cordinates)
        }

      }

      current_object_coordinates = [...new Set(current_object_coordinates)]

    }
    return (current_object_coordinates)

  }

  old_coordinates(previous_position) {
    var previous_position_cordinates = []
    var current_position = previous_position
    var old_height_span = previous_position.height
    var old_width_span = previous_position.width

    console.log('old position')
    if (old_height_span) {
      for (var x = old_height_span; x > 0; x--) {
        for (var y = old_width_span; y > 0; y--) {
          var cordinates = Number(x + '.' + y)
          previous_position_cordinates.push(cordinates)
        }

      }

      previous_position_cordinates = [...new Set(previous_position_cordinates)]


      for (var x = old_height_span; x > 0; x--) {
        for (var y = old_width_span; y > 0; y--) {
          var cordinates = Number(x + '.' + y)
          previous_position_cordinates.push(cordinates)
        }

      }

      previous_position_cordinates = [...new Set(previous_position_cordinates)]

    }

    return (previous_position_cordinates)

  }


您认为代码运行不正常的结论似乎不太可能。是什么让你认为发生了这种情况?你可能只是遇到了这样一个事实:Chrome控制台的UI异步呈现对象的内容。由于您正在对正在记录的对象进行变异,您可能只是在记录对象和检查对象之间看到了竞争条件。如果您使用Chrome Dev工具等调试器,您应该能够看到实际的操作顺序。日志消息的出现与代码语句的执行没有直接关系,可能会晚很多(如果有的话)。只有日志消息本身的内部顺序应该是可靠的,如果它们是同步执行的(这里看起来是这样的)。但是调试器可以更好地洞察实际执行情况。调试器显示,在运行
之前,
以前的对象坐标
正在更改为
当前对象坐标
值。旧的对象坐标(以前的位置)
您认为代码运行无序的结论似乎不太可能。是什么让你认为发生了这种情况?你可能只是遇到了这样一个事实:Chrome控制台的UI异步呈现对象的内容。由于您正在对正在记录的对象进行变异,您可能只是在记录对象和检查对象之间看到了竞争条件。如果您使用Chrome Dev工具等调试器,您应该能够看到实际的操作顺序。日志消息的出现与代码语句的执行没有直接关系,可能会晚很多(如果有的话)。只有日志消息本身的内部顺序应该是可靠的,如果它们是同步执行的(这里看起来是这样的)。但是调试器可以更好地了解实际执行情况。调试器显示,在运行
此之前,
以前的对象坐标
正在更改为
当前对象坐标
值。旧的对象坐标(以前的位置)