Mam funkcję:

function func1(callback){
   var num = 11111;
   callback.call(num);
}

Teraz nazywam to:

 func1(function(num){
    console.log("num= " + num);
 });

Ale dostałem to num jest niezdefiniowany.
Co może się mylić?

0
Kliver Max 24 listopad 2013, 16:30

2 odpowiedzi

Najlepsza odpowiedź

Function.call() wywołuje funkcję z zakresem przekazywanego odniesienia, wystarczy zadzwonić do niego w żadnym zakresie

function func1(callback){
   var num = 11111;
   callback(num);
}

Lub jeśli chcesz zadzwonić w dowolnym zakresie, pierwszy parametr jest zawsze odniesienie, więc podaj swoje params po tym, np.:

callabck.call(reference, param1, param2); 
callback.apply(reference, [param1, param2]);
1
abatishchev 25 listopad 2013, 06:14

Ponieważ podczas korzystania call Aby wywołać funkcję wywołania zwrotnego, num jest ustawiony jako ukryty {x2}} w nazwie funkcji, zmień na:

callback(num);

Zamiast callback.call(num);.

Z Dokumentacja MDN

Wartość tego przewidziana dla zabawy. Należy zauważyć, że może to nie być rzeczywista wartość widziana przez metodę: Jeśli metoda jest funkcją w nieregularnym kodzie Tryb, NULL i Undefined zostanie zastąpiony z globalnym obiektem, a prymitywne wartości zostaną zabytkowe.

1
Ibrahim Najjar 24 listopad 2013, 12:32