CINXE.COM
Callback (computer programming) - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Callback (computer programming) - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"42b1efd7-2585-411b-9a1f-07ff9ce810ee","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Callback_(computer_programming)","wgTitle":"Callback (computer programming)","wgCurRevisionId":1245692165,"wgRevisionId":1245692165,"wgArticleId":645246,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Articles with short description","Short description is different from Wikidata","Articles needing additional references from September 2015","All articles needing additional references","Articles with example C code","Subroutines"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Callback_(computer_programming)","wgRelevantArticleId":645246,"wgIsProbablyEditable":true, "wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q1205349","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics": true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.pygments":"ready","ext.cite.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.pygments.view","ext.cite.ux-enhancements","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups", "ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Callback (computer programming) - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Callback_(computer_programming)"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Callback_(computer_programming)&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Callback_(computer_programming)"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Callback_computer_programming rootpage-Callback_computer_programming skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Callback+%28computer+programming%29" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Callback+%28computer+programming%29" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Callback+%28computer+programming%29" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Callback+%28computer+programming%29" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-Analogy" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Analogy"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Analogy</span> </div> </a> <ul id="toc-Analogy-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Use" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Use"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Use</span> </div> </a> <button aria-controls="toc-Use-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Use subsection</span> </button> <ul id="toc-Use-sublist" class="vector-toc-list"> <li id="toc-Event_handling" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Event_handling"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Event handling</span> </div> </a> <ul id="toc-Event_handling-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Asynchronous_action" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Asynchronous_action"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.2</span> <span>Asynchronous action</span> </div> </a> <ul id="toc-Asynchronous_action-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Polymorphism" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Polymorphism"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.3</span> <span>Polymorphism</span> </div> </a> <ul id="toc-Polymorphism-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Conditional_action" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Conditional_action"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.4</span> <span>Conditional action</span> </div> </a> <ul id="toc-Conditional_action-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Implementation" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Implementation"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Implementation</span> </div> </a> <ul id="toc-Implementation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Example_code" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Example_code"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Example code</span> </div> </a> <button aria-controls="toc-Example_code-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Example code subsection</span> </button> <ul id="toc-Example_code-sublist" class="vector-toc-list"> <li id="toc-C" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#C"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>C</span> </div> </a> <ul id="toc-C-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-C++" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#C++"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>C++</span> </div> </a> <ul id="toc-C++-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-C#" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#C#"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.3</span> <span>C#</span> </div> </a> <ul id="toc-C#-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Kotlin" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Kotlin"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.4</span> <span>Kotlin</span> </div> </a> <ul id="toc-Kotlin-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-JavaScript" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#JavaScript"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.5</span> <span>JavaScript</span> </div> </a> <ul id="toc-JavaScript-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Red_and_REBOL" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Red_and_REBOL"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.6</span> <span>Red and REBOL</span> </div> </a> <ul id="toc-Red_and_REBOL-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Lua" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Lua"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.7</span> <span>Lua</span> </div> </a> <ul id="toc-Lua-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Python" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Python"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.8</span> <span>Python</span> </div> </a> <ul id="toc-Python-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Julia" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Julia"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.9</span> <span>Julia</span> </div> </a> <ul id="toc-Julia-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Callback (computer programming)</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 20 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-20" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">20 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/Callback" title="Callback – Minnan" lang="nan" hreflang="nan" data-title="Callback" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="Minnan" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Callback_(programaci%C3%B3)" title="Callback (programació) – Catalan" lang="ca" hreflang="ca" data-title="Callback (programació)" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/R%C3%BCckruffunktion" title="Rückruffunktion – German" lang="de" hreflang="de" data-title="Rückruffunktion" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/Callback_(%CF%80%CF%81%CE%BF%CE%B3%CF%81%CE%B1%CE%BC%CE%BC%CE%B1%CF%84%CE%B9%CF%83%CE%BC%CF%8C%CF%82)" title="Callback (προγραμματισμός) – Greek" lang="el" hreflang="el" data-title="Callback (προγραμματισμός)" data-language-autonym="Ελληνικά" data-language-local-name="Greek" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Retrollamada_(inform%C3%A1tica)" title="Retrollamada (informática) – Spanish" lang="es" hreflang="es" data-title="Retrollamada (informática)" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%A8%D8%A7%D8%B2%D8%AE%D9%88%D8%A7%D9%86%DB%8C_(%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87%E2%80%8C%D9%86%D9%88%DB%8C%D8%B3%DB%8C_%D8%B1%D8%A7%DB%8C%D8%A7%D9%86%D9%87)" title="بازخوانی (برنامهنویسی رایانه) – Persian" lang="fa" hreflang="fa" data-title="بازخوانی (برنامهنویسی رایانه)" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Fonction_de_rappel" title="Fonction de rappel – French" lang="fr" hreflang="fr" data-title="Fonction de rappel" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%BD%9C%EB%B0%B1" title="콜백 – Korean" lang="ko" hreflang="ko" data-title="콜백" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Callback" title="Callback – Italian" lang="it" hreflang="it" data-title="Callback" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%83%90%E3%83%83%E3%82%AF_(%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6)" title="コールバック (情報工学) – Japanese" lang="ja" hreflang="ja" data-title="コールバック (情報工学)" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-nn mw-list-item"><a href="https://nn.wikipedia.org/wiki/Attendekall" title="Attendekall – Norwegian Nynorsk" lang="nn" hreflang="nn" data-title="Attendekall" data-language-autonym="Norsk nynorsk" data-language-local-name="Norwegian Nynorsk" class="interlanguage-link-target"><span>Norsk nynorsk</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Wywo%C5%82anie_zwrotne" title="Wywołanie zwrotne – Polish" lang="pl" hreflang="pl" data-title="Wywołanie zwrotne" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Callback" title="Callback – Portuguese" lang="pt" hreflang="pt" data-title="Callback" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Callback_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)" title="Callback (программирование) – Russian" lang="ru" hreflang="ru" data-title="Callback (программирование)" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%A4%E0%AE%BF%E0%AE%B0%E0%AF%81%E0%AE%AA%E0%AF%8D%E0%AE%AA%E0%AE%BF_%E0%AE%85%E0%AE%B4%E0%AF%88_(%E0%AE%95%E0%AE%A3%E0%AE%BF%E0%AE%A9%E0%AE%BF%E0%AE%AF%E0%AE%BF%E0%AE%AF%E0%AE%B2%E0%AF%8D)" title="திருப்பி அழை (கணினியியல்) – Tamil" lang="ta" hreflang="ta" data-title="திருப்பி அழை (கணினியியல்)" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%A3%E0%B8%B5%E0%B8%A2%E0%B8%81%E0%B8%81%E0%B8%A5%E0%B8%B1%E0%B8%9A_(%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B9%82%E0%B8%9B%E0%B8%A3%E0%B9%81%E0%B8%81%E0%B8%A3%E0%B8%A1)" title="การเรียกกลับ (การเขียนโปรแกรม) – Thai" lang="th" hreflang="th" data-title="การเรียกกลับ (การเขียนโปรแกรม)" data-language-autonym="ไทย" data-language-local-name="Thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/Callback_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F)" title="Callback (програмування) – Ukrainian" lang="uk" hreflang="uk" data-title="Callback (програмування)" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Callback" title="Callback – Vietnamese" lang="vi" hreflang="vi" data-title="Callback" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E5%9B%9E%E5%91%BC%E5%87%BD%E6%95%B8" title="回呼函數 – Cantonese" lang="yue" hreflang="yue" data-title="回呼函數" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0" title="回调函数 – Chinese" lang="zh" hreflang="zh" data-title="回调函数" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q1205349#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Callback_(computer_programming)" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Callback_(computer_programming)" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Callback_(computer_programming)"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Callback_(computer_programming)&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Callback_(computer_programming)&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Callback_(computer_programming)"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Callback_(computer_programming)&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Callback_(computer_programming)&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Callback_(computer_programming)" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Callback_(computer_programming)" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Callback_(computer_programming)&oldid=1245692165" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Callback_(computer_programming)&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Callback_%28computer_programming%29&id=1245692165&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCallback_%28computer_programming%29"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FCallback_%28computer_programming%29"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Callback_%28computer_programming%29&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Callback_(computer_programming)&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q1205349" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">A function passed as data to and to be called by another function</div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">For a discussion of callback with computer <a href="/wiki/Modem" title="Modem">modems</a>, see <a href="/wiki/Callback_(telecommunications)" title="Callback (telecommunications)">Callback (telecommunications)</a>.</div> <style data-mw-deduplicate="TemplateStyles:r1251242444">.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}</style><table class="box-More_citations_needed plainlinks metadata ambox ambox-content ambox-Refimprove" role="presentation"><tbody><tr><td class="mbox-image"><div class="mbox-image-div"><span typeof="mw:File"><a href="/wiki/File:Question_book-new.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/50px-Question_book-new.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/75px-Question_book-new.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/100px-Question_book-new.svg.png 2x" data-file-width="512" data-file-height="399" /></a></span></div></td><td class="mbox-text"><div class="mbox-text-span">This article <b>needs additional citations for <a href="/wiki/Wikipedia:Verifiability" title="Wikipedia:Verifiability">verification</a></b>.<span class="hide-when-compact"> Please help <a href="/wiki/Special:EditPage/Callback_(computer_programming)" title="Special:EditPage/Callback (computer programming)">improve this article</a> by <a href="/wiki/Help:Referencing_for_beginners" title="Help:Referencing for beginners">adding citations to reliable sources</a>. Unsourced material may be challenged and removed.<br /><small><span class="plainlinks"><i>Find sources:</i> <a rel="nofollow" class="external text" href="https://www.google.com/search?as_eq=wikipedia&q=%22Callback%22+computer+programming">"Callback" computer programming</a> – <a rel="nofollow" class="external text" href="https://www.google.com/search?tbm=nws&q=%22Callback%22+computer+programming+-wikipedia&tbs=ar:1">news</a> <b>·</b> <a rel="nofollow" class="external text" href="https://www.google.com/search?&q=%22Callback%22+computer+programming&tbs=bkt:s&tbm=bks">newspapers</a> <b>·</b> <a rel="nofollow" class="external text" href="https://www.google.com/search?tbs=bks:1&q=%22Callback%22+computer+programming+-wikipedia">books</a> <b>·</b> <a rel="nofollow" class="external text" href="https://scholar.google.com/scholar?q=%22Callback%22+computer+programming">scholar</a> <b>·</b> <a rel="nofollow" class="external text" href="https://www.jstor.org/action/doBasicSearch?Query=%22Callback%22+computer+programming&acc=on&wc=on">JSTOR</a></span></small></span> <span class="date-container"><i>(<span class="date">September 2015</span>)</i></span><span class="hide-when-compact"><i> (<small><a href="/wiki/Help:Maintenance_template_removal" title="Help:Maintenance template removal">Learn how and when to remove this message</a></small>)</i></span></div></td></tr></tbody></table> <figure typeof="mw:File/Thumb"><a href="/wiki/File:Callback-notitle.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Callback-notitle.svg/370px-Callback-notitle.svg.png" decoding="async" width="370" height="104" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Callback-notitle.svg/555px-Callback-notitle.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/d4/Callback-notitle.svg/740px-Callback-notitle.svg.png 2x" data-file-width="512" data-file-height="144" /></a><figcaption>A callback is often back on the level of the original caller.</figcaption></figure> <p>In <a href="/wiki/Computer_programming" title="Computer programming">computer programming</a>, a <b>callback</b> is a <a href="/wiki/Function_(computer_programming)" title="Function (computer programming)">function</a> that is stored as data (a <a href="/wiki/Reference_(computer_science)" title="Reference (computer science)">reference</a>) and designed to be called by another function – often <i>back</i> to the original <a href="/wiki/Abstraction_(computer_science)" title="Abstraction (computer science)">abstraction layer</a>. </p><p>A function that accepts a callback <a href="/wiki/Parameter_(computer_programming)" title="Parameter (computer programming)">parameter</a> may be designed to call back before <a href="/wiki/Return_statement" title="Return statement">returning</a> to its caller which is known as <i><a href="/wiki/Synchronization_(computer_science)" title="Synchronization (computer science)">synchronous</a></i> or <i>blocking</i>. The function that accepts a callback may be designed to store the callback so that it can be called back after returning which is known as <i>asynchronous</i>, <i><a href="/wiki/Non-blocking_algorithm" title="Non-blocking algorithm">non-blocking</a></i> or <i>deferred</i>. </p><p><a href="/wiki/Programming_languages" class="mw-redirect" title="Programming languages">Programming languages</a> support callbacks in different ways such as <a href="/wiki/Function_pointers" class="mw-redirect" title="Function pointers">function pointers</a>, <a href="/wiki/Lambda_(programming)" class="mw-redirect" title="Lambda (programming)">lambda expressions</a> and <a href="/wiki/Block_(programming)" title="Block (programming)">blocks</a>. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Analogy">Analogy</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=1" title="Edit section: Analogy"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>To aid understanding the concept, the following is an analogy from real life. </p><p>A customer visits a store to place an order. This is like the first call. </p><p>The customer gives to a clerk a list of items, a check to cover their cost and delivery instructions. These are the parameters of the first call including the callback which is the delivery instructions. It is understood that the check will be cashed and that the instructions will be followed. </p><p>When the staff are able, they deliver the items as instructed which is like calling the callback. </p><p>Notably, the delivery need not be made by the clerk who took the order. A callback need not be called by the function that accepted the callback as a parameter. </p><p>Also, the delivery need not be made directly to the customer. A callback need not be to the calling function. In fact, a function would generally not pass itself as a callback. Some find the use of <i>back</i> to be misleading since the call is (generally) not back to the original caller as it is for a <a href="/wiki/Callback_(telecommunications)" title="Callback (telecommunications)">telephone call</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Use"><span class="anchor" id="TYPES"></span>Use</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=2" title="Edit section: Use"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A blocking callback runs in the <a href="/wiki/Execution_(computing)" title="Execution (computing)">execution</a> context of the function that passes the callback. A deferred callback can run in a different context such as during <a href="/wiki/Interrupt" title="Interrupt">interrupt</a> or from a <a href="/wiki/Thread_(computing)" title="Thread (computing)">thread</a>. As such, a deferred callback can be used for synchronization and delegating work to another thread. </p> <div class="mw-heading mw-heading3"><h3 id="Event_handling">Event handling</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=3" title="Edit section: Event handling"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A callback can be used for event handling. Often, consuming code registers a callback for a particular type of event. When that event occurs, the callback is called. </p><p>Callbacks are often used to program the <a href="/wiki/Graphical_user_interface" title="Graphical user interface">graphical user interface</a> (GUI) of a program that runs in a <a href="/wiki/Windowing_system" title="Windowing system">windowing system</a>. The application supplies a reference to a custom callback function for the windowing system to call. The windowing system calls this function to notify the application of events like <a href="/wiki/Computer_mouse" title="Computer mouse">mouse</a> clicks and <a href="/wiki/Computer_keyboard" title="Computer keyboard">key</a> presses. </p> <div class="mw-heading mw-heading3"><h3 id="Asynchronous_action">Asynchronous action</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=4" title="Edit section: Asynchronous action"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A callback can be used to implement asynchronous processing. A caller requests an action and provides a callback to be called when the action completes which might be long after the request is made. </p> <div class="mw-heading mw-heading3"><h3 id="Polymorphism">Polymorphism</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=5" title="Edit section: Polymorphism"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A callback can be used to implement <a href="/wiki/Polymorphism_(computer_science)" title="Polymorphism (computer science)">polymorphism</a>. In the following pseudocode, <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">SayHi</code> can take either <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">WriteStatus</code> or <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">WriteError</code>. </p> <div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span></span><span class="k">def</span> <span class="nf">WriteStatus</span><span class="p">(</span><span class="n">string</span> <span class="n">message</span><span class="p">):</span> <span class="n">Write</span><span class="p">(</span><span class="n">stdout</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> <span class="k">def</span> <span class="nf">WriteError</span><span class="p">(</span><span class="n">string</span> <span class="n">message</span><span class="p">):</span> <span class="n">Write</span><span class="p">(</span><span class="n">stderr</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span> <span class="k">def</span> <span class="nf">SayHi</span><span class="p">(</span><span class="n">write</span><span class="p">):</span> <span class="n">write</span><span class="p">(</span><span class="s2">"Hello world"</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Conditional_action">Conditional action</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=6" title="Edit section: Conditional action"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A callback can be used to implement conditional behavior. In the following pseudocode, if logging is enabled, <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">Log</code> calls the callback, <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">getMessage</code>, and writes the result. But, if logging is not enabled, then <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">getMessage</code> is not called; saving the runtime cost. </p> <div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span></span><span class="k">def</span> <span class="nf">Log</span><span class="p">(</span><span class="n">getMessage</span><span class="p">):</span> <span class="k">if</span> <span class="n">isLoggingEnabled</span><span class="p">:</span> <span class="n">message</span> <span class="o">=</span> <span class="n">getMessage</span><span class="p">();</span> <span class="n">WriteLine</span><span class="p">(</span><span class="n">message</span><span class="p">);</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Implementation">Implementation</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=7" title="Edit section: Implementation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The callback technology is implemented differently by <a href="/wiki/Programming_language" title="Programming language">programming language</a>. </p><p>In <a href="/wiki/Assembly_language" title="Assembly language">assembly</a>, <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a>, <a href="/wiki/C%2B%2B" title="C++">C++</a>, <a href="/wiki/Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a>, <a href="/wiki/Modula2" class="mw-redirect" title="Modula2">Modula2</a> and other languages, a callback function is stored internally as a <a href="/wiki/Function_pointer" title="Function pointer">function pointer</a>. Using the same storage allows different languages to directly share callbacks without a <a href="/wiki/Program_lifecycle_phase" title="Program lifecycle phase">design-time or runtime</a> <a href="/wiki/Interoperability" title="Interoperability">interoperability</a> <a href="/wiki/Abstraction_layer" title="Abstraction layer">layer</a>. For example, the <a href="/wiki/Windows_API" title="Windows API">Windows API</a> is accessible via multiple languages, compilers and assemblers. </p><p>C++ also allows objects to provide an implementation of the function call operation. The <a href="/wiki/Standard_Template_Library" title="Standard Template Library">Standard Template Library</a> accepts these objects (called <i><a href="/wiki/Function_object" title="Function object">functors</a></i>) as parameters. </p><p>Many <a href="/wiki/Dynamic_programming_language" title="Dynamic programming language">dynamic languages</a>, such as <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a>, <a href="/wiki/Lua_(programming_language)" title="Lua (programming language)">Lua</a>, <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a>, <a href="/wiki/Perl" title="Perl">Perl</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> and <a href="/wiki/PHP" title="PHP">PHP</a>, allow a function object to be passed. </p><p><a href="/wiki/List_of_CLI_languages" title="List of CLI languages">CLI languages</a> such as <a href="/wiki/C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a> and <a href="/wiki/VB.NET" class="mw-redirect" title="VB.NET">VB.NET</a> provide a <a href="/wiki/Type_safety" title="Type safety">type-safe</a> encapsulating function reference known as <a href="/wiki/Delegate_(CLI)" title="Delegate (CLI)">delegate</a>. </p><p>Events and <a href="/wiki/Event_handlers" class="mw-redirect" title="Event handlers">event handlers</a>, as used in .NET languages, provide for callbacks. </p><p>Functional languages generally support <a href="/wiki/First-class_functions" class="mw-redirect" title="First-class functions">first-class functions</a>, which can be passed as callbacks to other functions, stored as data or returned from functions. </p><p>Many languages, including Perl, Python, <a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, <a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a>, <a href="/wiki/C%2B%2B" title="C++">C++</a> (11+), C# and VB.NET (new versions) and most functional languages, support <a href="/wiki/Lambda_(programming)" class="mw-redirect" title="Lambda (programming)">lambda expressions</a>, unnamed functions with inline syntax, that generally acts as callbacks.. </p><p>In some languages, including <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a>, <a href="/wiki/ML_(programming_language)" title="ML (programming language)">ML</a>, JavaScript, Perl, Python, Smalltalk, PHP (since 5.3.0),<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> C++ (11+), Java (since 8),<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> and many others, a lambda can be a <a href="/wiki/Closure_(computer_science)" class="mw-redirect" title="Closure (computer science)">closure</a>, i.e. can access variables locally defined in the context in which the lambda is defined. </p><p>In an <a href="/wiki/Object-oriented_programming" title="Object-oriented programming">object-oriented programming</a> language such as <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a> versions before function-valued arguments, the behavior of a callback can be achieved by passing an object that implements an interface. The methods of this object are callbacks. </p><p>In <a href="/wiki/PL/I" title="PL/I">PL/I</a> and <a href="/wiki/ALGOL_60" title="ALGOL 60">ALGOL 60</a> a callback procedure may need to be able to access local variables in containing blocks, so it is called through an <i>entry variable</i> containing both the entry point and context information. <sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Example_code">Example code</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=8" title="Edit section: Example code"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="C">C</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=9" title="Edit section: C"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Callbacks have a wide variety of uses, for example in error signaling: a <a href="/wiki/Unix" title="Unix">Unix</a> program might not want to terminate immediately when it receives <a href="/wiki/SIGTERM" class="mw-redirect" title="SIGTERM">SIGTERM</a>, so to make sure that its termination is handled properly, it would register the cleanup function as a callback. Callbacks may also be used to control whether a function acts or not: <a href="/wiki/Xlib" title="Xlib">Xlib</a> allows custom predicates to be specified to determine whether a program wishes to handle an event. </p><p>In the following <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> code, function <code>PrintNumber</code> uses parameter <code>getNumber</code> as a blocking callback. <code>PrintNumber</code> is called with <code>GetAnswerToMostImportantQuestion</code> which acts as a callback function. When run the output is: "Value: 42". </p> <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdio.h></span> <span class="cp">#include</span><span class="w"> </span><span class="cpf"><stdlib.h></span> <span class="kt">void</span><span class="w"> </span><span class="nf">PrintNumber</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">getNumber</span><span class="p">)(</span><span class="kt">void</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">val</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">getNumber</span><span class="p">();</span> <span class="w"> </span><span class="n">printf</span><span class="p">(</span><span class="s">"Value: %d</span><span class="se">\n</span><span class="s">"</span><span class="p">,</span><span class="w"> </span><span class="n">val</span><span class="p">);</span> <span class="p">}</span> <span class="kt">int</span><span class="w"> </span><span class="nf">GetAnswerToMostImportantQuestion</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">42</span><span class="p">;</span> <span class="p">}</span> <span class="kt">int</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">PrintNumber</span><span class="p">(</span><span class="n">GetAnswerToMostImportantQuestion</span><span class="p">);</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="C++"><span id="C.2B.2B"></span>C++</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=10" title="Edit section: C++"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In C++, <a href="/wiki/Function_object" title="Function object">functor</a> can be used in addition to function pointer. </p> <div class="mw-heading mw-heading3"><h3 id="C#"><span id="C.23"></span>C#</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=11" title="Edit section: C#"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In the following <a href="/wiki/C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a> code, method <code>Helper.Method</code> uses parameter <code>callback</code> as a blocking callback. <code>Helper.Method</code> is called with <code>Log</code> which acts as a callback function. When run, the following is written to the console: "Callback was: Hello world". </p> <div class="mw-highlight mw-highlight-lang-c# mw-content-ltr" dir="ltr"><pre><span></span><span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">MainClass</span> <span class="p">{</span> <span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">Main</span><span class="p">(</span><span class="kt">string</span><span class="p">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Helper</span><span class="w"> </span><span class="n">helper</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Helper</span><span class="p">();</span> <span class="w"> </span><span class="n">helper</span><span class="p">.</span><span class="n">Method</span><span class="p">(</span><span class="n">Log</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">Log</span><span class="p">(</span><span class="kt">string</span><span class="w"> </span><span class="n">str</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s">$"Callback was: {str}"</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> <span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Helper</span> <span class="p">{</span> <span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">Method</span><span class="p">(</span><span class="n">Action</span><span class="o"><</span><span class="kt">string</span><span class="o">></span><span class="w"> </span><span class="n">callback</span><span class="p">)</span> <span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">callback</span><span class="p">(</span><span class="s">"Hello world"</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Kotlin">Kotlin</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=12" title="Edit section: Kotlin"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In the following <a href="/wiki/Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a> code, function <code>askAndAnswer</code> uses parameter <code>getAnswer</code> as a blocking callback. <code>askAndAnswer</code> is called with <code>getAnswerToMostImportantQuestion</code> which acts as a callback function. Running this will tell the user that the answer to their question is "42". </p> <div class="mw-highlight mw-highlight-lang-kotlin mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">fun</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">print</span><span class="p">(</span><span class="s">"Enter the most important question: "</span><span class="p">)</span> <span class="w"> </span><span class="kd">val</span><span class="w"> </span><span class="nv">question</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">readLine</span><span class="p">()</span> <span class="w"> </span><span class="n">askAndAnswer</span><span class="p">(</span><span class="n">question</span><span class="p">,</span><span class="w"> </span><span class="o">::</span><span class="n">getAnswerToMostImportantQuestion</span><span class="p">)</span> <span class="p">}</span> <span class="kd">fun</span><span class="w"> </span><span class="nf">getAnswerToMostImportantQuestion</span><span class="p">():</span><span class="w"> </span><span class="kt">Int</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="m">42</span> <span class="p">}</span> <span class="kd">fun</span><span class="w"> </span><span class="nf">askAndAnswer</span><span class="p">(</span><span class="n">question</span><span class="p">:</span><span class="w"> </span><span class="kt">String?</span><span class="p">,</span><span class="w"> </span><span class="n">getAnswer</span><span class="p">:</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="kt">Int</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"Question: </span><span class="si">$</span><span class="n">question</span><span class="s">"</span><span class="p">)</span> <span class="w"> </span><span class="n">println</span><span class="p">(</span><span class="s">"Answer: </span><span class="si">${</span><span class="n">getAnswer</span><span class="p">()</span><span class="si">}</span><span class="s">"</span><span class="p">)</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="JavaScript">JavaScript</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=13" title="Edit section: JavaScript"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In the following <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a> code, function <code>calculate</code> uses parameter <code>operate</code> as a blocking callback. <code>calculate</code> is called with <code>multiply</code> and then with <code>sum</code> which act as callback functions. </p> <div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">function</span><span class="w"> </span><span class="nx">calculate</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="w"> </span><span class="nx">b</span><span class="p">,</span><span class="w"> </span><span class="nx">operate</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">operate</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="w"> </span><span class="nx">b</span><span class="p">);</span> <span class="p">}</span> <span class="kd">function</span><span class="w"> </span><span class="nx">multiply</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="w"> </span><span class="nx">b</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">b</span><span class="p">;</span> <span class="p">}</span> <span class="kd">function</span><span class="w"> </span><span class="nx">sum</span><span class="p">(</span><span class="nx">a</span><span class="p">,</span><span class="w"> </span><span class="nx">b</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">b</span><span class="p">;</span> <span class="p">}</span> <span class="c1">// outputs 20</span> <span class="nx">alert</span><span class="p">(</span><span class="nx">calculate</span><span class="p">(</span><span class="mf">10</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">,</span><span class="w"> </span><span class="nx">multiply</span><span class="p">));</span> <span class="c1">// outputs 12</span> <span class="nx">alert</span><span class="p">(</span><span class="nx">calculate</span><span class="p">(</span><span class="mf">10</span><span class="p">,</span><span class="w"> </span><span class="mf">2</span><span class="p">,</span><span class="w"> </span><span class="nx">sum</span><span class="p">));</span> </pre></div> <p>The collection method <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">.each()</code> of the <a href="/wiki/JQuery" title="JQuery">jQuery</a> <a href="/wiki/JavaScript_libraries" class="mw-redirect" title="JavaScript libraries">library</a> uses the function passed to it as a blocking callback. It calls the callback for each item of the collection. For example: </p> <div class="mw-highlight mw-highlight-lang-javascript mw-content-ltr" dir="ltr"><pre><span></span><span class="nx">$</span><span class="p">(</span><span class="s2">"li"</span><span class="p">).</span><span class="nx">each</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">index</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">index</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">": "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">$</span><span class="p">(</span><span class="k">this</span><span class="p">).</span><span class="nx">text</span><span class="p">());</span> <span class="p">});</span> </pre></div> <p>Deferred callbacks are commonly used for handling events from the user, the client and timers. Examples can be found in <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">addEventListener</code>, <a href="/wiki/Ajax_(programming)" title="Ajax (programming)">Ajax</a> and <code><a href="/wiki/XMLHttpRequest" title="XMLHttpRequest">XMLHttpRequest</a></code>. <sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> </p><p>In addition to using callbacks in JavaScript source code, C functions that take a function are supported via js-ctypes.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Red_and_REBOL">Red and REBOL</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=14" title="Edit section: Red and REBOL"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The following <a href="/wiki/REBOL" class="mw-redirect" title="REBOL">REBOL</a>/<a href="/wiki/Red_(programming_language)" title="Red (programming language)">Red</a> code demonstrates callback use. </p> <ul><li>As alert requires a string, form produces a string from the result of calculate</li> <li>The get-word! values (i.e., :calc-product and :calc-sum) trigger the interpreter to return the code of the function rather than evaluate with the function.</li> <li>The datatype! references in a block! [float! integer!] restrict the type of values passed as arguments.</li></ul> <div class="mw-highlight mw-highlight-lang-red mw-content-ltr" dir="ltr"><pre><span></span><span class="nv">Red</span> <span class="gs">[</span><span class="gu">Title:</span> <span class="s">"Callback example"</span><span class="gs">]</span> <span class="gu">calculate:</span> <span class="nb">func</span> <span class="gs">[</span> <span class="nv">num1</span> <span class="gs">[</span><span class="kt">number!</span><span class="gs">]</span> <span class="nv">num2</span> <span class="gs">[</span><span class="kt">number!</span><span class="gs">]</span> <span class="nv">callback-function</span> <span class="gs">[</span><span class="kt">function!</span><span class="gs">]</span> <span class="gs">][</span> <span class="nv">callback-function</span> <span class="nv">num1</span> <span class="nv">num2</span> <span class="gs">]</span> <span class="gu">calc-product:</span> <span class="nb">func</span> <span class="gs">[</span> <span class="nv">num1</span> <span class="gs">[</span><span class="kt">number!</span><span class="gs">]</span> <span class="nv">num2</span> <span class="gs">[</span><span class="kt">number!</span><span class="gs">]</span> <span class="gs">][</span> <span class="nv">num1</span> <span class="o">*</span> <span class="nv">num2</span> <span class="gs">]</span> <span class="gu">calc-sum:</span> <span class="nb">func</span> <span class="gs">[</span> <span class="nv">num1</span> <span class="gs">[</span><span class="kt">number!</span><span class="gs">]</span> <span class="nv">num2</span> <span class="gs">[</span><span class="kt">number!</span><span class="gs">]</span> <span class="gs">][</span> <span class="nv">num1</span> <span class="o">+</span> <span class="nv">num2</span> <span class="gs">]</span> <span class="c">; alerts 75, the product of 5 and 15</span> <span class="nv">alert</span> <span class="nf">form</span> <span class="nv">calculate</span> <span class="m">5</span> <span class="m">15</span> <span class="gu">:calc-product</span> <span class="c">; alerts 20, the sum of 5 and 15</span> <span class="nv">alert</span> <span class="nf">form</span> <span class="nv">calculate</span> <span class="m">5</span> <span class="m">15</span> <span class="gu">:calc-sum</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Lua">Lua</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=15" title="Edit section: Lua"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A color tweening example using the <a href="/wiki/Roblox" title="Roblox">Roblox</a> engine that takes an optional .done callback: </p> <div class="mw-highlight mw-highlight-lang-lua mw-content-ltr" dir="ltr"><pre><span></span><span class="n">wait</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="kd">local</span> <span class="n">DT</span> <span class="o">=</span> <span class="n">wait</span><span class="p">()</span> <span class="kr">function</span> <span class="nf">tween_color</span><span class="p">(</span><span class="n">object</span><span class="p">,</span> <span class="n">finish_color</span><span class="p">,</span> <span class="n">fade_time</span><span class="p">)</span> <span class="kd">local</span> <span class="n">step_r</span> <span class="o">=</span> <span class="n">finish_color</span><span class="p">.</span><span class="n">r</span> <span class="o">-</span> <span class="n">object</span><span class="p">.</span><span class="n">BackgroundColor3</span><span class="p">.</span><span class="n">r</span> <span class="kd">local</span> <span class="n">step_g</span> <span class="o">=</span> <span class="n">finish_color</span><span class="p">.</span><span class="n">g</span> <span class="o">-</span> <span class="n">object</span><span class="p">.</span><span class="n">BackgroundColor3</span><span class="p">.</span><span class="n">g</span> <span class="kd">local</span> <span class="n">step_b</span> <span class="o">=</span> <span class="n">finish_color</span><span class="p">.</span><span class="n">b</span> <span class="o">-</span> <span class="n">object</span><span class="p">.</span><span class="n">BackgroundColor3</span><span class="p">.</span><span class="n">b</span> <span class="kd">local</span> <span class="n">total_steps</span> <span class="o">=</span> <span class="mi">1</span><span class="o">/</span><span class="p">(</span><span class="n">DT</span><span class="o">*</span><span class="p">(</span><span class="mi">1</span><span class="o">/</span><span class="n">fade_time</span><span class="p">))</span> <span class="kd">local</span> <span class="n">completed</span><span class="p">;</span> <span class="nb">coroutine.wrap</span><span class="p">(</span><span class="kr">function</span><span class="p">()</span> <span class="kr">for</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">DT</span><span class="o">*</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">fade_time</span><span class="p">)</span> <span class="kr">do</span> <span class="n">object</span><span class="p">.</span><span class="n">BackgroundColor3</span> <span class="o">=</span> <span class="n">Color3</span><span class="p">.</span><span class="n">new</span> <span class="p">(</span> <span class="n">object</span><span class="p">.</span><span class="n">BackgroundColor3</span><span class="p">.</span><span class="n">r</span> <span class="o">+</span> <span class="p">(</span><span class="n">step_r</span><span class="o">/</span><span class="n">total_steps</span><span class="p">),</span> <span class="n">object</span><span class="p">.</span><span class="n">BackgroundColor3</span><span class="p">.</span><span class="n">g</span> <span class="o">+</span> <span class="p">(</span><span class="n">step_g</span><span class="o">/</span><span class="n">total_steps</span><span class="p">),</span> <span class="n">object</span><span class="p">.</span><span class="n">BackgroundColor3</span><span class="p">.</span><span class="n">b</span> <span class="o">+</span> <span class="p">(</span><span class="n">step_b</span><span class="o">/</span><span class="n">total_steps</span><span class="p">)</span> <span class="p">)</span> <span class="n">wait</span><span class="p">()</span> <span class="kr">end</span> <span class="kr">if</span> <span class="n">completed</span> <span class="kr">then</span> <span class="n">completed</span><span class="p">()</span> <span class="kr">end</span> <span class="kr">end</span><span class="p">)()</span> <span class="kr">return</span> <span class="p">{</span> <span class="n">done</span> <span class="o">=</span> <span class="kr">function</span><span class="p">(</span><span class="n">callback</span><span class="p">)</span> <span class="n">completed</span> <span class="o">=</span> <span class="n">callback</span> <span class="kr">end</span> <span class="p">}</span> <span class="kr">end</span> <span class="n">tween_color</span><span class="p">(</span><span class="n">some_object</span><span class="p">,</span> <span class="n">Color3</span><span class="p">.</span><span class="n">new</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mi">1</span><span class="p">).</span><span class="n">done</span><span class="p">(</span><span class="kr">function</span><span class="p">()</span> <span class="nb">print</span> <span class="s2">"Color tweening finished!"</span> <span class="kr">end</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Python">Python</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=16" title="Edit section: Python"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In the following <a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a> code, function <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">calculate</code> accepts a parameter <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">operate</code> that is used as a blocking callback. <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">calculate</code> is called with <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">square</code> which acts as a callback function. </p> <div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span></span><span class="k">def</span> <span class="nf">square</span><span class="p">(</span><span class="n">val</span><span class="p">):</span> <span class="k">return</span> <span class="n">val</span> <span class="o">**</span> <span class="mi">2</span> <span class="k">def</span> <span class="nf">calculate</span><span class="p">(</span><span class="n">operate</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span> <span class="k">return</span> <span class="n">operate</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="c1"># outputs: 25</span> <span class="n">calculate</span><span class="p">(</span><span class="n">square</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Julia">Julia</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=17" title="Edit section: Julia"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In the following <a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a> code, function <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">calculate</code> accepts a parameter <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">operate</code> that is used as a blocking callback. <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">calculate</code> is called with <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">square</code> which acts as a callback function. </p> <div class="mw-highlight mw-highlight-lang-jlcon mw-content-ltr" dir="ltr"><pre><span></span><span class="gp">julia></span><span class="w"> </span><span class="n">square</span><span class="p">(</span><span class="n">val</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">val</span><span class="o">^</span><span class="mi">2</span> <span class="go">square (generic function with 1 method)</span> <span class="gp">julia></span><span class="w"> </span><span class="n">calculate</span><span class="p">(</span><span class="n">operate</span><span class="p">,</span><span class="n">val</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">operate</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="go">calculate (generic function with 1 method)</span> <span class="gp">julia></span><span class="w"> </span><span class="n">calculate</span><span class="p">(</span><span class="n">square</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> <span class="go">25</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=18" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239009302">.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{clear:left;float:left;margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}</style><ul role="navigation" aria-label="Portals" class="noprint portalbox portalborder portalright"> <li class="portalbox-entry"><span class="portalbox-image"><span class="noviewer" typeof="mw:File"><a href="/wiki/File:Octicons-terminal.svg" class="mw-file-description"><img alt="icon" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/24px-Octicons-terminal.svg.png" decoding="async" width="24" height="28" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/37px-Octicons-terminal.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Octicons-terminal.svg/49px-Octicons-terminal.svg.png 2x" data-file-width="896" data-file-height="1024" /></a></span></span><span class="portalbox-link"><a href="/wiki/Portal:Computer_programming" title="Portal:Computer programming">Computer programming portal</a></span></li></ul> <style data-mw-deduplicate="TemplateStyles:r1184024115">.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}</style><div class="div-col" style="column-width: 25em;"> <ul><li><a href="/wiki/Command_pattern" title="Command pattern">Command pattern</a></li> <li><a href="/wiki/Continuation-passing_style" title="Continuation-passing style">Continuation-passing style</a></li> <li><a href="/wiki/Event_loop" title="Event loop">Event loop</a></li> <li><a href="/wiki/Event-driven_programming" title="Event-driven programming">Event-driven programming</a></li> <li><a href="/wiki/Implicit_invocation" title="Implicit invocation">Implicit invocation</a></li> <li><a href="/wiki/Inversion_of_control" title="Inversion of control">Inversion of control</a></li> <li><a href="/wiki/Libsigc%2B%2B" title="Libsigc++">libsigc++</a>, a callback library for C++</li> <li><a href="/wiki/Signals_and_slots" title="Signals and slots">Signals and slots</a></li> <li><a href="/wiki/User_exit" title="User exit">User exit</a></li></ul> </div> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=19" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist"> <div class="mw-references-wrap"><ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.unix.org.ua/orelly/perl/cookbook/ch11_05.htm">"Perl Cookbook - 11.4. Taking References to Functions"</a>. 2 July 1999<span class="reference-accessdate">. Retrieved <span class="nowrap">2008-03-03</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Perl+Cookbook+-+11.4.+Taking+References+to+Functions&rft.date=1999-07-02&rft_id=http%3A%2F%2Fwww.unix.org.ua%2Forelly%2Fperl%2Fcookbook%2Fch11_05.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3ACallback+%28computer+programming%29" class="Z3988"></span></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.unix.org.ua/orelly/perl/advprog/ch04_02.htm">"Advanced Perl Programming - 4.2 Using Subroutine References"</a>. 2 July 1999<span class="reference-accessdate">. Retrieved <span class="nowrap">2008-03-03</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Advanced+Perl+Programming+-+4.2+Using+Subroutine+References&rft.date=1999-07-02&rft_id=http%3A%2F%2Fwww.unix.org.ua%2Forelly%2Fperl%2Fadvprog%2Fch04_02.htm&rfr_id=info%3Asid%2Fen.wikipedia.org%3ACallback+%28computer+programming%29" class="Z3988"></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://secure.php.net/manual/en/functions.anonymous.php">"PHP Language Reference - Anonymous functions"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2011-06-08</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=PHP+Language+Reference+-+Anonymous+functions&rft_id=https%3A%2F%2Fsecure.php.net%2Fmanual%2Fen%2Ffunctions.anonymous.php&rfr_id=info%3Asid%2Fen.wikipedia.org%3ACallback+%28computer+programming%29" class="Z3988"></span></span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.oracle.com/technetwork/java/javase/8-whats-new-2157071.html">"What's New in JDK 8"</a>. <i>oracle.com</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=oracle.com&rft.atitle=What%27s+New+in+JDK+8&rft_id=http%3A%2F%2Fwww.oracle.com%2Ftechnetwork%2Fjava%2Fjavase%2F8-whats-new-2157071.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3ACallback+%28computer+programming%29" class="Z3988"></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBelzerHolzmanKent1979" class="citation book cs1">Belzer, Jack; Holzman, Albert G; Kent, Allen, eds. (1979). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=IFmaqTI9-KsC&pg=PA164"><i>Encyclopedia of Computer Science and Technology: Volume 12</i></a>. Marcel Dekker, inc. p. 164. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/0-8247-2262-0" title="Special:BookSources/0-8247-2262-0"><bdi>0-8247-2262-0</bdi></a><span class="reference-accessdate">. Retrieved <span class="nowrap">January 28,</span> 2024</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Encyclopedia+of+Computer+Science+and+Technology%3A+Volume+12&rft.pages=164&rft.pub=Marcel+Dekker%2C+inc.&rft.date=1979&rft.isbn=0-8247-2262-0&rft_id=https%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3DIFmaqTI9-KsC%26pg%3DPA164&rfr_id=info%3Asid%2Fen.wikipedia.org%3ACallback+%28computer+programming%29" class="Z3988"></span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://udn.realityripple.com/docs/Mozilla/Creating_JavaScript_callbacks_in_components#JavaScript_functions_as_callbacks">"Creating JavaScript callbacks in components"</a>. Archive. <i>UDN Web Docs</i> (Documentation page). sec. JavaScript functions as callbacks. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20211216020616/https://udn.realityripple.com/docs/Mozilla/Creating_JavaScript_callbacks_in_components">Archived</a> from the original on 2021-12-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-12-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=UDN+Web+Docs&rft.atitle=Creating+JavaScript+callbacks+in+components&rft.pages=sec.+JavaScript+functions+as+callbacks&rft_id=https%3A%2F%2Fudn.realityripple.com%2Fdocs%2FMozilla%2FCreating_JavaScript_callbacks_in_components%23JavaScript_functions_as_callbacks&rfr_id=info%3Asid%2Fen.wikipedia.org%3ACallback+%28computer+programming%29" class="Z3988"></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHolleyShepherd" class="citation web cs1">Holley, Bobby; Shepherd, Eric (eds.). <a rel="nofollow" class="external text" href="https://developer.mozilla.org.cach3.com/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_and_Using_Callbacks">"Declaring and Using Callbacks"</a>. Docs. <i><a href="/wiki/Mozilla_Developer_Network" class="mw-redirect" title="Mozilla Developer Network">Mozilla Developer Network</a></i> (Documentation page). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190117092921/https://developer.mozilla.org/en-US/docs/Mozilla/js-ctypes/Using_js-ctypes/Declaring_and_Using_Callbacks">Archived</a> from the original on 2019-01-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-12-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Mozilla+Developer+Network&rft.atitle=Declaring+and+Using+Callbacks&rft_id=https%3A%2F%2Fdeveloper.mozilla.org.cach3.com%2Fen-US%2Fdocs%2FMozilla%2Fjs-ctypes%2FUsing_js-ctypes%2FDeclaring_and_Using_Callbacks&rfr_id=info%3Asid%2Fen.wikipedia.org%3ACallback+%28computer+programming%29" class="Z3988"></span></span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Callback_(computer_programming)&action=edit&section=20" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="https://learn.microsoft.com/en-us/archive/msdn-magazine/2002/december/using-net-implementing-callback-notifications-using-delegates">Basic Instincts: Implementing Callback Notifications Using Delegates</a> - <a href="/wiki/MSDN_Magazine" class="mw-redirect" title="MSDN Magazine">MSDN Magazine</a>, December 2002</li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080916192721/http://www.javaworld.com/javaworld/javatips/jw-javatip10.html">Implement callback routines in Java</a></li> <li><a rel="nofollow" class="external text" href="https://www.codeproject.com/Articles/7865/Implement-Script-Callback-Framework-in-ASP-NET-1-x">Implement Script Callback Framework in ASP.NET 1.x</a> - Code Project, 2 August 2004</li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110706132209/http://www.comp.ua.ac.be/publications/files/Adapter-Para04.pdf">Interfacing C++ member functions with C libraries</a> (archived from the original on July 6, 2011)</li> <li><a rel="nofollow" class="external text" href="http://gotw.ca/gotw/083.htm">Style Case Study #2: Generic Callbacks</a></li></ul> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐48vfm Cached time: 20241122142100 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.307 seconds Real time usage: 0.421 seconds Preprocessor visited node count: 1234/1000000 Post‐expand include size: 25695/2097152 bytes Template argument size: 1049/2097152 bytes Highest expansion depth: 9/100 Expensive parser function count: 31/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 51989/5000000 bytes Lua time usage: 0.168/10.000 seconds Lua memory usage: 5713731/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 356.407 1 -total 35.39% 126.126 1 Template:Reflist 28.18% 100.446 6 Template:Cite_web 20.88% 74.416 1 Template:Short_description 18.20% 64.871 1 Template:More_references 16.24% 57.886 1 Template:Ambox 12.92% 46.063 2 Template:Pagetype 7.86% 28.016 1 Template:Portal 5.68% 20.250 1 Template:For 4.51% 16.071 4 Template:Main_other --> <!-- Saved in parser cache with key enwiki:pcache:idhash:645246-0!canonical and timestamp 20241122142100 and revision id 1245692165. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Callback_(computer_programming)&oldid=1245692165">https://en.wikipedia.org/w/index.php?title=Callback_(computer_programming)&oldid=1245692165</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Category</a>: <ul><li><a href="/wiki/Category:Subroutines" title="Category:Subroutines">Subroutines</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_is_different_from_Wikidata" title="Category:Short description is different from Wikidata">Short description is different from Wikidata</a></li><li><a href="/wiki/Category:Articles_needing_additional_references_from_September_2015" title="Category:Articles needing additional references from September 2015">Articles needing additional references from September 2015</a></li><li><a href="/wiki/Category:All_articles_needing_additional_references" title="Category:All articles needing additional references">All articles needing additional references</a></li><li><a href="/wiki/Category:Articles_with_example_C_code" title="Category:Articles with example C code">Articles with example C code</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 14 September 2024, at 14:58<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Callback_(computer_programming)&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-g6cgs","wgBackendResponseTime":166,"wgPageParseReport":{"limitreport":{"cputime":"0.307","walltime":"0.421","ppvisitednodes":{"value":1234,"limit":1000000},"postexpandincludesize":{"value":25695,"limit":2097152},"templateargumentsize":{"value":1049,"limit":2097152},"expansiondepth":{"value":9,"limit":100},"expensivefunctioncount":{"value":31,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":51989,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 356.407 1 -total"," 35.39% 126.126 1 Template:Reflist"," 28.18% 100.446 6 Template:Cite_web"," 20.88% 74.416 1 Template:Short_description"," 18.20% 64.871 1 Template:More_references"," 16.24% 57.886 1 Template:Ambox"," 12.92% 46.063 2 Template:Pagetype"," 7.86% 28.016 1 Template:Portal"," 5.68% 20.250 1 Template:For"," 4.51% 16.071 4 Template:Main_other"]},"scribunto":{"limitreport-timeusage":{"value":"0.168","limit":"10.000"},"limitreport-memusage":{"value":5713731,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-48vfm","timestamp":"20241122142100","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Callback (computer programming)","url":"https:\/\/en.wikipedia.org\/wiki\/Callback_(computer_programming)","sameAs":"http:\/\/www.wikidata.org\/entity\/Q1205349","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q1205349","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2003-12-15T11:11:40Z","dateModified":"2024-09-14T14:58:18Z","headline":"any executable code that is passed as an argument to other code that is expected to call back the argument at a given time"}</script> </body> </html>