Javascript array.forEach 范围?
Javascript array.forEach Scope?
第9行的console.log显示
{ 'count' : 1111111 , 'average' : 2222222 , 'total' : 3333333 }
对于所有 3 个数组元素,即使进行这些更改的循环还没有 运行。这怎么可能?
function test11(){
var test = [
{ 'count' : 1 , 'average' : 2 , 'total' : 3 } ,
{ 'count' : 10 , 'average' : 20 , 'total' : 30 } ,
{ 'count' : 100 , 'average' : 200 , 'total' : 300 }
] ;
console.log( test ) ;
test.forEach( function( element , service_index , array ){
array[ service_index ].count = 1111111 ;
array[ service_index ].average = 2222222 ;
array[ service_index ].total = 3333333 ;
});
console.log( test ) ;
return ;
}
这是代码 http://jsfiddle.net/d46wh2cv/7/ 的 jsfiddle。
我在以下位置阅读了规格:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
但我没有看到任何关于这种反直觉行为的解释。
我 运行ning Debian Linux 与 Google chrome 39.0.2171.95 并且在 Iceweasel 24.5.0 中也有相同的结果。
感谢您的帮助。
您正在记录对对象的引用(因为数组是全局数组对象的一个实例)。
你是对的,循环在日志行时没有 运行,但这并不重要。
当您检查它时,值已经更改(因为循环可能需要 2 或 3 毫秒才能达到 运行)。
尝试只记录 test[0].count
而不是整个对象。
第9行的console.log显示
{ 'count' : 1111111 , 'average' : 2222222 , 'total' : 3333333 }
对于所有 3 个数组元素,即使进行这些更改的循环还没有 运行。这怎么可能?
function test11(){
var test = [
{ 'count' : 1 , 'average' : 2 , 'total' : 3 } ,
{ 'count' : 10 , 'average' : 20 , 'total' : 30 } ,
{ 'count' : 100 , 'average' : 200 , 'total' : 300 }
] ;
console.log( test ) ;
test.forEach( function( element , service_index , array ){
array[ service_index ].count = 1111111 ;
array[ service_index ].average = 2222222 ;
array[ service_index ].total = 3333333 ;
});
console.log( test ) ;
return ;
}
这是代码 http://jsfiddle.net/d46wh2cv/7/ 的 jsfiddle。
我在以下位置阅读了规格:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
但我没有看到任何关于这种反直觉行为的解释。
我 运行ning Debian Linux 与 Google chrome 39.0.2171.95 并且在 Iceweasel 24.5.0 中也有相同的结果。
感谢您的帮助。
您正在记录对对象的引用(因为数组是全局数组对象的一个实例)。
你是对的,循环在日志行时没有 运行,但这并不重要。 当您检查它时,值已经更改(因为循环可能需要 2 或 3 毫秒才能达到 运行)。
尝试只记录 test[0].count
而不是整个对象。