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工具等调试器,您应该能够看到实际的操作顺序。日志消息的出现与代码语句的执行没有直接关系,可能会晚很多(如果有的话)。只有日志消息本身的内部顺序应该是可靠的,如果它们是同步执行的(这里看起来是这样的)。但是调试器可以更好地了解实际执行情况。调试器显示,在运行此之前,以前的对象坐标
正在更改为当前对象坐标
值。旧的对象坐标(以前的位置)