我对JavaScript或Chrome控制台的行为感到非常困惑.有人可以帮我理解吗?
基本上我有以下JavaScript代码,而不是嵌套在任何函数或其他范围内:
var initial_array = [];
function initialiseArray() {
initial_array = [2, 9, 8, 6, 0, 2, 1];
}
function copyToNewArray() {
var copied_array = [];
console.log("COPIED 1", copied_array);
for (var i = 0; i < initial_array.length; i++) {
var copy = initial_array[i];
copied_array.push(copy);
}
console.log("COPIED 2", copied_array);
}
initialiseArray();
copyToNewArray();
Run Code Online (Sandbox Code Playgroud)
我希望COPIED 1打印[]- 因为变量尚未分配 - 而是打印[2, 9, 8, 6, 0, 2, 1]- 即分配后的值.
为什么?
顺便说一句,如果用8-11替换第8行initial_array = copied_array,那么RESULTS 1确实打印为[].这与使用有关.push吗?
尝试在Chrome脚本调试程序中调试您的问题.在线上放一个断点:
for (var i = 0; i < initial_array.length; i++) {
Run Code Online (Sandbox Code Playgroud)
你会看到你想要的行为.
您遇到的问题是您正在做出错误的假设,即Chrome调试器会立即"打印"该值,而实际上它是console.log异步执行的.由于数组在实际去打印值时在后端通过引用传递,因此它现在是您正在看到的值.
| 归档时间: |
|
| 查看次数: |
5428 次 |
| 最近记录: |