Type/to search
0
Follow
0
Followers
Khi kiểm tra ngược, dữ liệu thu được bằng cách gọi API dựa trên thời điểm nào?
Help
Created 2017-10-31 18:38:15  Updated 2017-10-31 18:48:57
 5
 1970

Bạn có thể nói một cách đơn giản về thời gian mà GetTicker () và GetRecords () lấy dữ liệu dựa trên?
Ví dụ, khi gặp một câu hỏi rất kỳ lạ, đoạn mã dưới đây:
function main() {
 while (true) {
  var records = exchange.GetRecords();
  records.pop();
  Log(records.length);
  Sleep(60000);
 }
}
Độ dài của các record cuối cùng là 0:
img

Tuy nhiên, nếu bạn bỏ đi pop () và gọi:
function main() {
 while (true) {
  var records = exchange.GetRecords();
  //records.pop();
  Log(records.length);
  Sleep(60000);
 }
}
Và kết quả cuối cùng là bình thường:
img

Nếu không có vòng lặp while, thì không có vấn đề gì khi gọi pop (():
function main() {
 var records = exchange.GetRecords();
 records.pop();
 Log(records.length);
 Sleep(60000);
}
img

Bạn có thể trả lời không?

Related Recommendations
Comment
All comments (5)

    GetRecords返回的数组, 其实是低层维护的同一个变量, 所以不能直接更改.

    9 years ago

    原来如此。建议在API文档里说明一下,防止误操作。

    9 years ago

    可能是js语言的特性导致的?我用slice()拷贝一次就没事了,不明白为什么……

    9 years ago

    用这个 深拷贝函数试下, 每次 获取到的 records 深拷贝一下, 然后就可以随意修改 复制后的 变量了。

    var cloneObj = function(obj) { // 深拷贝 对象函数 var str, newobj = obj.constructor === Array ? [] : {}; if (typeof obj !== 'object') { return; } else if (JSON) { str = JSON.stringify(obj); //系列化对象 newobj = JSON.parse(str); //还原 } else { for (var i in obj) { newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i]; } } return newobj; };
    9 years ago

    slice() 这个是 彻底的复制 , 并不是引用。引用的操作 其实是 同一个 变量,修改了 下次获取 就会有影响。

    9 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)