{"id":1634,"date":"2024-01-28T12:42:29","date_gmt":"2024-01-28T11:42:29","guid":{"rendered":"https:\/\/codeflarelimited.com\/blog\/?p=1634"},"modified":"2024-01-28T12:42:31","modified_gmt":"2024-01-28T11:42:31","slug":"understanding-javascript-closures","status":"publish","type":"post","link":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/","title":{"rendered":"Understanding JavaScript Closures"},"content":{"rendered":"\n<p>JavaScript closures are a powerful and often misunderstood concept that plays a crucial role in the language&#8217;s ability to manage scope and encapsulate functionality. In this article, we&#8217;ll explore what closures are, how they work, provide examples of their use cases, and discuss both their benefits and potential pitfalls.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What are Closures?<\/h2>\n\n\n\n<p>In JavaScript, a closure is created when a function is defined inside another function (the outer function) and has access to the outer function&#8217;s variables. This inner function, even if executed outside the scope of the outer function, &#8220;closes over&#8221; the variables from the outer function, allowing it to retain access to them. In simpler terms, a closure allows a function to &#8220;remember&#8221; the environment in which it was created. This includes the variables, parameters and functions available in the outer Functions scope.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How Closures Work<\/h2>\n\n\n\n<p>Let&#8217;s delve into a simple example to understand how closures work:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">function outerFunction() {\n  let outerVariable = 'I am from the outer function';\n\n  function innerFunction() {\n    console.log(outerVariable);\n  }\n\n  return innerFunction;\n}\n\nconst closureFunction = outerFunction();\nclosureFunction(); \/\/ Logs 'I am from the outer function'\n<\/code><\/pre>\n\n\n\n<p>In this example, <code>outerFunction<\/code> contains a variable <code>outerVariable<\/code> and returns <code>innerFunction<\/code>. When <code>outerFunction<\/code> is called, it creates a closure by returning <code>innerFunction<\/code>. The <code>closureFunction<\/code> now has access to <code>outerVariable<\/code>, even though <code>outerFunction<\/code> has completed execution.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Use Cases of Closures<\/h2>\n\n\n\n<h2 class=\"wp-block-heading\">1. Data Encapsulation and Privacy<\/h2>\n\n\n\n<p>Closures are often used to create private variables and encapsulate data within a function. This helps in preventing unintended modifications to the internal state of an object.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">function createCounter() {\n  let count = 0;\n\n  return function () {\n    count++;\n    console.log(count);\n  };\n}\n\nconst counter = createCounter();\ncounter(); \/\/ Logs 1\ncounter(); \/\/ Logs 2\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">2. Factory Functions<\/h2>\n\n\n\n<p>Closures are instrumental in creating factory functions. These functions generate and return other functions with specific behavior based on the initial parameters.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">function greet(prefix) {\n  return function (name) {\n    console.log(`${prefix}, ${name}!`);\n  };\n}\n\nconst greetMorning = greet('Good morning');\ngreetMorning('John'); \/\/ Logs 'Good morning, John!'\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Benefits of Closures<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Encapsulation:<\/strong> Closures allow for the creation of private variables, promoting encapsulation and preventing unintended external access.<\/li>\n\n\n\n<li><strong>Data Persistence:<\/strong> Closures enable functions to retain access to variables, even after the outer function has completed execution.<\/li>\n\n\n\n<li><strong>Dynamic Function Generation:<\/strong> Closures facilitate the creation of functions with dynamic behavior, enhancing flexibility in code design<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Potential Pitfalls<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Memory Usage:<\/strong> Closures can lead to memory leaks if not managed properly. Variables from the outer function are retained in memory as long as the closure exists.<\/li>\n\n\n\n<li><strong>Scope Chain Complexity:<\/strong> Deeply nested closures may lead to a complex scope chain, making code harder to read and debug.<\/li>\n<\/ol>\n\n\n\n<p><strong>Below is an example of how you can use HTML and JavaScript closures to create a simple counter application.<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"markup\" class=\"language-markup\">&lt;!DOCTYPE html&gt;\r\n&lt;html lang=\"en\"&gt;\r\n&lt;head&gt;\r\n    &lt;meta charset=\"UTF-8\"&gt;\r\n    &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\r\n    &lt;title&gt;Counter App&lt;\/title&gt;\r\n    &lt;style&gt;\r\n        body {\r\n            font-family: Arial, sans-serif;\r\n            display: flex;\r\n            align-items: center;\r\n            justify-content: center;\r\n            height: 100vh;\r\n            margin: 0;\r\n        }\r\n\r\n        button {\r\n            padding: 10px;\r\n            font-size: 16px;\r\n            margin: 0 10px;\r\n        }\r\n    &lt;\/style&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n\r\n&lt;div&gt;\r\n    &lt;h1&gt;Counter App&lt;\/h1&gt;\r\n    &lt;p&gt;Current Count: &lt;span id=\"count\"&gt;0&lt;\/span&gt;&lt;\/p&gt;\r\n    &lt;button onclick=\"increment()\"&gt;Increment&lt;\/button&gt;\r\n    &lt;button onclick=\"decrement()\"&gt;Decrement&lt;\/button&gt;\r\n&lt;\/div&gt;\r\n\r\n&lt;script&gt;\r\n    \/\/ Closure to encapsulate the counter logic\r\n    const counterApp = (function () {\r\n        let count = 0; \/\/ Private variable\r\n\r\n        function updateCount() {\r\n            document.getElementById('count').innerText = count;\r\n        }\r\n\r\n        return {\r\n            increment: function () {\r\n                count++;\r\n                updateCount();\r\n            },\r\n            decrement: function () {\r\n                count--;\r\n                updateCount();\r\n            }\r\n        };\r\n    })();\r\n\r\n    function increment() {\r\n        counterApp.increment();\r\n    }\r\n\r\n    function decrement() {\r\n        counterApp.decrement();\r\n    }\r\n&lt;\/script&gt;\r\n\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/code><\/pre>\n\n\n\n<p><strong>Here is the result! <\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized is-style-rounded\"><img loading=\"lazy\" decoding=\"async\" width=\"733\" height=\"355\" src=\"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/CaptureJs3.png\" alt=\"\" class=\"wp-image-1636\" style=\"width:840px;height:auto\" srcset=\"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/CaptureJs3.png 733w, https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/CaptureJs3-300x145.png 300w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/figure>\n\n\n\n<p><strong>in this result, once you click on Decrement the Current Count decreases, the same applies to Increment. <\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Understanding JavaScript closures is crucial for mastering the language&#8217;s more advanced features. Closures provide an elegant solution for data encapsulation, dynamic function generation, and maintaining scope. Therefore, they offer numerous benefits. However, developers should be mindful of potential pitfalls to write efficient and maintainable code.<\/p>\n\n\n\n<p><a href=\"https:\/\/codeflarelimited.com\/blog\/exploring-javascript-variables-var-let-and-const\/\">Exploring JavaScript variables: var, let, and const.<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>JavaScript closures are a powerful and often misunderstood concept that plays a crucial role in the language&#8217;s ability<\/p>\n","protected":false},"author":3,"featured_media":1644,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[11],"tags":[],"class_list":["post-1634","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Understanding JavaScript Closures<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Understanding JavaScript Closures\" \/>\n<meta property=\"og:description\" content=\"JavaScript closures are a powerful and often misunderstood concept that plays a crucial role in the language&#8217;s ability\" \/>\n<meta property=\"og:url\" content=\"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-28T11:42:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-28T11:42:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/css-trigonometric-functions-3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2240\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Kene Samuel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/\"},\"author\":{\"name\":\"Kene Samuel\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#\\\/schema\\\/person\\\/c501609bab46c16807eb32106074f206\"},\"headline\":\"Understanding JavaScript Closures\",\"datePublished\":\"2024-01-28T11:42:29+00:00\",\"dateModified\":\"2024-01-28T11:42:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/\"},\"wordCount\":434,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/css-trigonometric-functions-3.png\",\"articleSection\":[\"javascript\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/\",\"name\":\"Understanding JavaScript Closures\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/css-trigonometric-functions-3.png\",\"datePublished\":\"2024-01-28T11:42:29+00:00\",\"dateModified\":\"2024-01-28T11:42:31+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/#primaryimage\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/css-trigonometric-functions-3.png\",\"contentUrl\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/css-trigonometric-functions-3.png\",\"width\":2240,\"height\":1260},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/understanding-javascript-closures\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"javascript\",\"item\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/javascript\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Understanding JavaScript Closures\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/\",\"name\":\"\",\"description\":\"Sustainable solutions\",\"publisher\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#organization\",\"name\":\"Codeflare Limited\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/codeflare.png\",\"contentUrl\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/11\\\/codeflare.png\",\"width\":1040,\"height\":263,\"caption\":\"Codeflare Limited\"},\"image\":{\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/#\\\/schema\\\/person\\\/c501609bab46c16807eb32106074f206\",\"name\":\"Kene Samuel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g\",\"caption\":\"Kene Samuel\"},\"url\":\"https:\\\/\\\/codeflarelimited.com\\\/blog\\\/author\\\/kene\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Understanding JavaScript Closures","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/","og_locale":"en_US","og_type":"article","og_title":"Understanding JavaScript Closures","og_description":"JavaScript closures are a powerful and often misunderstood concept that plays a crucial role in the language&#8217;s ability","og_url":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/","article_published_time":"2024-01-28T11:42:29+00:00","article_modified_time":"2024-01-28T11:42:31+00:00","og_image":[{"width":2240,"height":1260,"url":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/css-trigonometric-functions-3.png","type":"image\/png"}],"author":"Kene Samuel","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/#article","isPartOf":{"@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/"},"author":{"name":"Kene Samuel","@id":"https:\/\/codeflarelimited.com\/blog\/#\/schema\/person\/c501609bab46c16807eb32106074f206"},"headline":"Understanding JavaScript Closures","datePublished":"2024-01-28T11:42:29+00:00","dateModified":"2024-01-28T11:42:31+00:00","mainEntityOfPage":{"@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/"},"wordCount":434,"commentCount":0,"publisher":{"@id":"https:\/\/codeflarelimited.com\/blog\/#organization"},"image":{"@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/#primaryimage"},"thumbnailUrl":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/css-trigonometric-functions-3.png","articleSection":["javascript"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/","url":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/","name":"Understanding JavaScript Closures","isPartOf":{"@id":"https:\/\/codeflarelimited.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/#primaryimage"},"image":{"@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/#primaryimage"},"thumbnailUrl":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/css-trigonometric-functions-3.png","datePublished":"2024-01-28T11:42:29+00:00","dateModified":"2024-01-28T11:42:31+00:00","breadcrumb":{"@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/#primaryimage","url":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/css-trigonometric-functions-3.png","contentUrl":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/css-trigonometric-functions-3.png","width":2240,"height":1260},{"@type":"BreadcrumbList","@id":"https:\/\/codeflarelimited.com\/blog\/understanding-javascript-closures\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/codeflarelimited.com\/blog\/"},{"@type":"ListItem","position":2,"name":"javascript","item":"https:\/\/codeflarelimited.com\/blog\/javascript\/"},{"@type":"ListItem","position":3,"name":"Understanding JavaScript Closures"}]},{"@type":"WebSite","@id":"https:\/\/codeflarelimited.com\/blog\/#website","url":"https:\/\/codeflarelimited.com\/blog\/","name":"","description":"Sustainable solutions","publisher":{"@id":"https:\/\/codeflarelimited.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/codeflarelimited.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/codeflarelimited.com\/blog\/#organization","name":"Codeflare Limited","url":"https:\/\/codeflarelimited.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/codeflarelimited.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2020\/11\/codeflare.png","contentUrl":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2020\/11\/codeflare.png","width":1040,"height":263,"caption":"Codeflare Limited"},"image":{"@id":"https:\/\/codeflarelimited.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/codeflarelimited.com\/blog\/#\/schema\/person\/c501609bab46c16807eb32106074f206","name":"Kene Samuel","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3e1716cd715a5b5491e1f2da373b52f2f73aeb37d268baff34719116e386d848?s=96&d=mm&r=g","caption":"Kene Samuel"},"url":"https:\/\/codeflarelimited.com\/blog\/author\/kene\/"}]}},"jetpack_featured_media_url":"https:\/\/codeflarelimited.com\/blog\/wp-content\/uploads\/2024\/01\/css-trigonometric-functions-3.png","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/posts\/1634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/comments?post=1634"}],"version-history":[{"count":2,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/posts\/1634\/revisions"}],"predecessor-version":[{"id":1645,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/posts\/1634\/revisions\/1645"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/media\/1644"}],"wp:attachment":[{"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/media?parent=1634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/categories?post=1634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codeflarelimited.com\/blog\/wp-json\/wp\/v2\/tags?post=1634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}