调试 JS 的时候发现某些位置很意外地颠倒了顺序,
我存了一个全局变量 store
, 每次把 store
存在 history
里边,
那么我觉得 history
里不去操作是不会改变了, 但是… 却变了.
图片当中第一次查看 history
的最后一项, 第二次的倒数第二项 1 位置发生了颠倒…
图片加载失败的话在这里: http://huaban.com/pins/6503638/zoom/
说到颠倒数组, 我的确有 reverse(store)
这样对 store
进行操作的, 但不该有影响啊.
下面是往 history
数组存储 store
的代码… 我也试过加 store.concat()
, 没效果…
完整在: https://github.com/jiyinyiyong/code_blocks/blob/gh-pages/convert.coffee
editor_mode = on
store = ['\t']
history = [store]
current = 0
history_make = (store) ->
history = history[..current]
console.log ":::", store
history.push store
console.log "###", history[history.length-1]
current+= 1
socket.emit 'sync', store if socket?
window.onload = ->
box = tag 'box'
window.focus()
refresh = (store) ->
console.log store
box.innerHTML = draw store
history_make store.concat()
实在闹不明白是怎么改变掉的… 求助啊.
完整代码太长了,你的reverse写到哪里了。是不是先reverse了然后操作store然后再存的。
- coffee看不懂,你的代码局部的看不出来。
- 我猜你是不是发生这种情况: 因为都是用的store这个名字,所以你在‘重新赋值’前对store进行了reverse,注意这个时候store指向的值已经reverse了,然后使用了store,之后再对其赋值进行其他操作。
比如:
var array=[1,2];
var array2=array;
array.reverse();
array.push(3);
print(array);
print(array2);
array=[3,4];
print(array);
print(array2);
@jiyinyiyong 初始化history=[store],所以store.reverse对第一个元素肯定有影响。然后history_make也没看出哪有错啊。要不打个断点调试下吧。
@jiyinyiyong 运行到下一行时才能看history的值,你可以在你怀疑的方法上打个断点,然后方法内挨步执行,查看里面变量的变化。
呃。。复制这个问题,你这一坨代码隐藏得够深的。。
concat 不会改变现有的,返回的是一个副本