я реализую обхват с обратным вызовом с использованием call()
функции (примером из http://ejohn.org/apps/learn/#28 см ниже)Javascript мутации массива в перекручивании с обратным вызовом
function loop(array, fn){
for (var i = 0; i < array.length; i++)
fn.call(array, array[i], i);
}
Чтобы изменить содержимое массива, я могу использовать
var a = [0,1,2]
loop(a, function(v, i) { this[i] = 0; }); // a = [0,0,0]
но не
var a = [0,1,2]
loop(a, function(v, i) { v = 0; }); // a = [0,1,2]
Почему это происходит? this
- array
, поэтому this[i]
и array[i]
и v
- это то же самое. Однако в одном случае массив модифицируется, а в другом он остается неизменным.
Поскольку переназначение переменной в javascript не будет обновлять то, что указала эта переменная – megawac