Как следующая функция стрелки java-скрипта идентифицирует индекс? - PullRequest
0 голосов
/ 10 октября 2019

Следующий скрипт транспонирует данный массив двумя способами. Оба выполняют свою работу, только я не понимаю, как работает второй метод.

//Define array
var a = [[1,2,3],[4,5,6]];

//Transpose
var b = a[0].map((col, i) => a.map(row => row[i]));
console.log(b); //[ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]

//Transpose using callback
b = a[0].map(callbBackFunction(a));
b = a[0].map(callbBackFunction()); //Correction
console.log(b); //[ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]

function callbBackFunction() {        
    return (col, ind) => a.map(row => row[ind]);
}

Эти два метода практически идентичны только во второй раз, когда извлечение функции callBack карты было извлечено во внешнюю функцию.

Я не понимаю, как переменной ind в callBackFunction присваивается ее значение, поскольку callBackFunction не определяется и не вызывается с параметрами.

Функции карты вызываютобеспечивает обратный вызов, в данном случае callBackFunction, с текущим индексом (а также с текущим элементом и сопоставленным массивом), но callBackFunction не имеет параметров для принятия этого значения.

чтоя пропустил?

* изменить: это была опечатка:

b = a [0] .map (callbBackFunction ());

вместо

b = a [0] .map (callbBackFunction (a));

1 Ответ

0 голосов
/ 10 октября 2019

callbBackFunction выполняется до запуска map и фактически возвращает функцию внутри него. Эта функция не выполняется до тех пор, пока не будет запущено map, и вы можете видеть, что она имеет ту же сигнатуру функции, что и обратный вызов map.

function callbBackFunction() {        
    return (col, ind) => a.map(row => row[ind]);
}

Вот пример, который поможет немногобольше смысла:

const fn1 = () => {
     return (name) => "hello " + name
}

// fn1 returns the name func
const nameFn = fn1()

// we can now call nameFn with an argument
nameFn('OJNSim') // hello OJNSim

Подробнее о замыканиях можно узнать здесь: https://medium.com/javascript-scene/master-the-javascript-interview-what-is-a-closure-b2f0d2152b36

...