Вызов функции с аргументами

#javascript #asynchronous

Вопрос:

У меня есть упражнение, в котором я должен привести три аргумента: функцию и два числа. Функция, которую я даю, должна быть активирована (каждая) через x миллисекунды в течение y миллисекунд. Я хотел сделать helper вот так:

 function helper(string) {
  console.log("Printing string which was given: "   string)
}
 

но когда я делаю это так и пытаюсь включить свою функцию ex1_4(helper("some string"), 500,5000) , я получаю ошибку, которая Callback must be a function
Что я делаю не так?

 function ex1_4(func, x,y) {
    const resFunction = setInterval((func), x)
    const stop = setTimeout(() => {clearInterval(resFunction)}, y)
}
function helper(string) {
    console.log("Printing string which was given: "   string)

}
ex1_4(helper("some string"),500,5000)
 

Ответ №1:

 helper("some string") 
 

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

  () => helper(“some string”)
 

В вашем коде:

 ex1_4(() => helper("some string"),500,5000)
 

Ответ №2:

Когда вы добавляете helper("some string") , вы фактически выполняете метод, вместо того, чтобы отправлять метод ex1_4 . Вы должны напечатать что-то вроде …

 ex1_4(helper,500,5000)  // no parenthesis
 

… точно так же, как ты сделал с setInterval((func), x) .

Однако вы хотите добавить параметры helper , и в этом случае вы можете использовать привязку. Вам действительно следует узнать о bind() , call() , и apply() .

 ex1_4(helper.bind(null, "some string"),500,5000)
 
 function ex1_4(func, x,y) {
    const resFunction = setInterval((func), x)
    const stop = setTimeout(() => {clearInterval(resFunction)}, y)
}
function helper(string) {
    console.log("Printing string which was given: "   string)

}

ex1_4(helper.bind(null, "some string"),500,5000)