Функция, которую вы назначаете window.onload
, - это функция выражение , а не функция объявление . Имя именованного выражения функции не добавляется в окружающую область, и поэтому оно доступно только локально для самого выражения функции. Это означает, что вы не сможете ссылаться на него позже вне функции:
function iAmAFunctionDeclaration() {
console.log("abc");
}
+function iAmAFunctionExpression() {
console.log("abc");
}
console.log(typeof iAmAFunctionDeclaration);
console.log(typeof iAmAFunctionExpression); // undefined (not added to the `window`).
Вместо этого, если вы можете сделать apiCall
объявлением функции, вы сможете получить доступ к ее имени, чтобы выполнить его позже, а также назначить его как обратный вызов:
function apiCall() {
console.log("performing api call");
}
window.onload = apiCall;
document.addEventListener("click", apiCall);
Чтобы ваш API-вызов работал правильно, вы можете либо .bind()
ваш request
к вашей apiCall
функции, как показано @ Stratubas или вы можете заменить ключевое слово this
на request
. Это позволит вам обрабатывать то, на что ссылается this
в вашем обратном вызове. Чтобы узнать больше о this
внутри обратного вызова, см. этот ответ и этот ответ .
Подробнее о выражениях функций можно прочитать здесь.