Javascript "forEach" цикл вопроса - PullRequest
2 голосов
/ 19 апреля 2011

Я где-то видел фрагмент кода:

list.forEach(callback, this);

Я понимаю цикл "forEach", за исключением того, что здесь используется ключевое слово "this", что означает "this"?

если я конвертирую list.forEach(callback) в нормальное значение для цикла, я думаю, что это:

for(var n=0; n<list.length; n++){
   callback(list[n]);
}

Но что означает "this" в forEach(callback, this)? Что нужно добавить в this, если я преобразую его в обычный цикл for, как указано выше?

Ответы [ 4 ]

3 голосов
/ 19 апреля 2011

this используется в качестве объекта this при выполнении обратного вызова.

 for(var n=0; n<list.length; n++){
       callback.call(this, list[n]);
    }

см .: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/array/foreach

2 голосов
/ 19 апреля 2011

this - текущий объект.Метод list.forEach() будет вызван в контексте объекта.Вы должны иметь возможность использовать фрагмент, передавая объект, который вы хотите зациклить, в качестве второго аргумента, например:

var obj = {
    a: "foo",
    b: "bar"
}

list.forEach(callback, obj);
1 голос
/ 19 апреля 2011

forEach не является стандартным javascript, но, вероятно, был частью библиотеки.Dojo Toolkit имеет такую ​​конструкцию forEach, или это мог быть метод, добавленный к прототипу Array().

Аргумент this, скорее всего, был идентификатором того, какой объект должен иметь контекстфункция обратного вызова.То есть, если сама функция обратного вызова вызывает this, к какому объекту за пределами функции обратного вызова она должна обратиться.

0 голосов
/ 11 мая 2014

Существует массив forEach, который принимает функцию, которая принимает одно значение, которое применяется к каждому элементу в коллекции. Практическим примером использования цикла forEach является следующий, который анализирует параметры URL веб-страницы:

var query = location.search.slice(1);    
var result = {}, keyValuePairs = query.split('&');

keyValuePairs.forEach(function(keyValuePair) {
    keyValuePair = keyValuePair.split('=');
    result[keyValuePair[0]] = keyValuePair[1] || '';
});

Затем вы можете использовать объект result в качестве ассоциативного массива или структуры, подобной карте, и получать значения из него с помощью var somevalue = result["somekey"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...