@Pantene742

Как получить доступ к переменным из callback функции JavaScript?

Как получить доступ к данным контекста вызова из callback бэкафункции, когда он обявлен в другом месте и передан в функцию в переменной.

function myFunc(array,  func) {
    aray.forEach( ( ) =>  {
        settimeout(func, 1000)
})
}

myFunc([1, 2, 3, 4], ( ) => {
    console.log("print array after each 1 second" array) // переменную array не видит !!!!
})


//  если же в при обьявлении функции myFunct мы setTimeOut передаем не ссылку на функцию, а саму функцию обявляем в параметре setTimeOut( ( ) => {  
    console.log(array);   // Это работает . 
  }, 1000)

// второй вариант.  // второй вариант.  // второй вариант.  // второй вариант.  // второй вариант.  // второй вариант. 

function myFunc(array,  func) {
    aray.forEach( ( ) =>  {
        SetTimeOut(  ( ) => {   console.log(array);  } , 1000)  //  функцию лежащую в параметре func не используем а обьявляем ее в параметре setTimeOut.
})
}

myFunc([1, 2, 3, 4], ( ) => {
    console.log("print array after each 1 second") 
})
  • Вопрос задан
  • 416 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Функция func в вашем первом варианте «не знает» что у переменной array есть какое-то там значение. Ведь её, функцию эту, объявили раньше и выше )

Во втором вашем варианте array известен на момент, когда заряжают таймер.

Можно так:
function myFunc(arr,  func) {
  arr.forEach( ( ) =>  {
    setTimeout(
      func.bind(null, arr),  // привязываем к функции аргумент
      1000
    )
  })
}

myFunc([1, 2, 3, 4], (a) => {
    console.log("print array after each 1 second", a);
});

Тут есть договорённость, что в функцию первым параметром придёт нужное значение.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Jumandjilos
из псевдомассива arguments
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы