Я пытаюсь обернуть мою голову вокруг некоторого кода в Javascript нинзя на странице 57.Javascript Ninja: Текущий элемент в массиве в контексте функции
function forEach(list, callback) {
for (var n = 0; n < list.length; n++) {
callback.call(list[n], n); //makes the current element the function context of callback???
}
}
var weapons = ['shuriken', 'katana', 'nunchucks'];
forEach(weapons,
function(index) {
assert(this == weapons[index], "Got the expected value of " + weapons[index]);
}
);
я могу передать индекс массива в функции обратного вызова без используя метод вызова, и это имеет смысл. Я не понимаю, почему я хочу использовать текущий элемент в качестве контекста функции. Что это пытается сделать?
Мне также трудно понять, как это можно сделать. Я предполагаю, что метод вызова рассматривает элемент списка как объект, а не как элемент в массиве. Но я не уверен, что это правильно.
Моя другая мысль заключалась в том, что, не назначая контекст функции текущему элементу, контекст функции будет функцией forEach
. Я не уверен, какие проблемы могут возникнуть, если они есть, и, возможно, это связано с причиной изменения контекста функции.
Это код _exact_? Чтобы сделать то, что он пытается сделать, я ожидал бы, что вызов функции в цикле for будет чем-то вроде 'callback.call (list [n], n)' - Обратите внимание на дополнительный '.call' –
ah ya справа. Я пропустил это благодарение за это. – rmares2
Я не понимаю ваш второй абзац («Мне тяжело ...»). Не могли бы вы прояснить это немного? – JLRishe