2013-07-09 2 views
3

Я пытался передать метод «проталкивания» массива непосредственно к каждому элементу вызова на другой массив:Связывание Array.push

result = [] 
l1 = [1] 
f = result.push.bind(result) 
l1.forEach(f) 

И результат заканчивается:

> result 
[ 1, 0, [ 1 ] ] 

Если я , вместо этого:

l1.forEach(function (x) { f(x); }) 

Тогда все работает нормально. Что происходит?

ответ

6

Чтобы понять, что происходит на бегу этот код отрезала

[1].forEach(function() { 
    console.log(arguments); 
}); 

И вы получите

[1, 0, Array[1]] 

функции, подаваемое forEach метод вызывается для каждого элемента массива, со следующими параметрами:

  1. Элемент массива
  2. Элемента позиция
  3. Массив сам

Таким образом, кажется, что вы не может делать то, что вы хотите с связыванием push вызова конкретного экземпляра массива ...

+0

Doh, это совершенно не произошло мне, что forEach может пройти 3 аргумента. Благодаря! –

Смежные вопросы