0

Я только начал играть с функциональным программированием и пытаюсь передать функцию в качестве аргумента другой функции. Однако функция, которую я пытаюсь передать также аргументы, как так:Передача функции как аргумента, которая использует аргумент родительской функции, но также имеет собственный аргумент

function splitStringBy(string, type, func) { 

    // Split string by type. 
    var splitArray = string.split(type); 
    console.log(splitArray); 

    // Do something with the array. 
    func !== undefined ? func(splitArray) : null; 
} 



function loopArray(array, func) { 

    // Loop through array. 
    for (var i = 0; i < array.length; i++) { 
     func(array[i]); 
    } 
} 

Мне нужно передать splitArray моему loopArray()

Вот как я пытаюсь назвать:

splitStringBy($scope.textSpace, "<br>", loopArray(splitArray, function() { 
      console.log('It worked!'); 
})); 

Консоль с ошибкой: splitArray не определен.

ответ

1

Вместо того, чтобы передавать loopArray как функцию, вы на самом деле вызываете его, а затем передаете его возвращаемое значение в splitStringBy. Поскольку splitArray не определяется, когда вы сначала ссылаетесь на него, он бросает эту ошибку.

Что вы хотите сделать что-то вроде этого:

function splitStringBy(string, type, func) { 

    // Split string by type. 
    var splitArray = string.split(type); 
    console.log(splitArray); 

    // Do something with the array. 
    func !== undefined ? func(splitArray) : null; 
} 

function loopArray(func) { 
    // Return function for looping. 
    return function(array) { 
     // Loop through array. 
     for (var i = 0; i < array.length; i++) { 
      func(array[i]); 
     } 
    } 
} 

splitStringBy($scope.textSpace, "<br>", loopArray(function() { 
     console.log('It worked!'); 
})); 

Это называется выделка, где функция передает функцию в качестве возвращаемого значения. loopArray создаст функцию, а затем вернет ее. Затем мы передаем вновь созданную функцию в splitStringBy, которая затем вызывает ее.

+0

Так что я предполагаю, что если вы хотите сделать то же самое с функцией внутри loopArray, вы бы сделали то же самое, не так ли? – Fyxerz

+1

Да, но я действительно не знаю, почему вам понадобится двойное карри в такой ситуации. –

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