{"id":28331,"date":"2025-05-16T15:02:51","date_gmt":"2025-05-16T08:02:51","guid":{"rendered":"https:\/\/interdata.vn\/blog\/?p=28331"},"modified":"2025-06-20T16:10:00","modified_gmt":"2025-06-20T09:10:00","slug":"closure-la-gi","status":"publish","type":"post","link":"https:\/\/interdata.vn\/blog\/closure-la-gi\/","title":{"rendered":"Closure trong JavaScript: T\u1ea7m quan tr\u1ecdng, \u01afu, nh\u01b0\u1ee3c \u0111i\u1ec3m a-z"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-white ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed8I DUNG<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Closure-la-gi\" >Closure l\u00e0 g\u00ec?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Tai-sao-JavaScript-Closures-lai-quan-trong\" >T\u1ea1i sao JavaScript Closures l\u1ea1i quan tr\u1ecdng<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Vi-du-minh-hoa-ve-Closure-trong-JavaScript\" >V\u00ed d\u1ee5 minh h\u1ecda v\u1ec1 Closure trong JavaScript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Cac-dac-diem-cua-Closure-trong-JavaScript\" >C\u00e1c \u0111\u1eb7c \u0111i\u1ec3m c\u1ee7a Closure trong JavaScript<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Uu-va-nhuoc-diem-cua-Closures-trong-JavaScript\" >\u01afu v\u00e0 nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a Closures trong JavaScript<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Uu-diem-cua-JavaScript-Closures\" >\u01afu \u0111i\u1ec3m c\u1ee7a JavaScript Closures<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Nhuoc-diem-cua-JavaScript-Closures\" >Nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a JavaScript Closures<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Cac-truong-hop-su-dung-Closure-pho-bien\" >C\u00e1c tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng Closure ph\u1ed5 bi\u1ebfn<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Tao-bien-%E2%80%9CPrivate%E2%80%9D-bang-Closure\" >T\u1ea1o bi\u1ebfn &#8220;Private&#8221; b\u1eb1ng Closure<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Module-Pattern-co-dien\" >Module Pattern c\u1ed5 \u0111i\u1ec3n<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Su-dung-Closure-trong-Callback-va-Event-Handler\" >S\u1eed d\u1ee5ng Closure trong Callback v\u00e0 Event Handler<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Currying-va-Partial-Application\" >Currying v\u00e0 Partial Application<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Factory-Functions\" >Factory Functions<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#5-dieu-trong-JavaScript-Closures\" >5 \u0111i\u1ec1u trong JavaScript Closures<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Cac-cau-hoi-thuong-gap-ve-Closure-trong-JavaScript\" >C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Closure trong JavaScript<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Closure-khac-gi-Scope\" >Closure kh\u00e1c g\u00ec Scope?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Su-dung-Closure-co-gay-ro-ri-bo-nho-khong\" >S\u1eed d\u1ee5ng Closure c\u00f3 g\u00e2y r\u00f2 r\u1ec9 b\u1ed9 nh\u1edb kh\u00f4ng?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/#Van-de-thuong-gap-voi-Closure-trong-vong-lap-la-gi\" >V\u1ea5n \u0111\u1ec1 th\u01b0\u1eddng g\u1eb7p v\u1edbi Closure trong v\u00f2ng l\u1eb7p l\u00e0 g\u00ec?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<p>Tr\u00ean h\u00e0nh tr\u00ecnh chinh ph\u1ee5c JavaScript, c\u00f3 m\u1ed9t kh\u00e1i ni\u1ec7m n\u1ec1n t\u1ea3ng c\u1ef1c k\u1ef3 m\u1ea1nh m\u1ebd nh\u01b0ng th\u01b0\u1eddng khi\u1ebfn kh\u00f4ng \u00edt l\u1eadp tr\u00ecnh vi\u00ean c\u1ea3m th\u1ea5y b\u1ed1i r\u1ed1i: \u0111\u00f3 ch\u00ednh l\u00e0 Closure. Hi\u1ec3u r\u00f5 <a href=\"https:\/\/interdata.vn\/blog\/closure-la-gi\/\">Closure l\u00e0 g\u00ec<\/a> kh\u00f4ng ch\u1ec9 gi\u00fap b\u1ea1n vi\u1ebft code hi\u1ec7u qu\u1ea3 h\u01a1n m\u00e0 c\u00f2n m\u1edf ra c\u00e1nh c\u1eeda \u0111\u1ec3 l\u00e0m vi\u1ec7c v\u1edbi nhi\u1ec1u k\u1ef9 thu\u1eadt v\u00e0 Design Pattern quan tr\u1ecdng trong JavaScript hi\u1ec7n \u0111\u1ea1i. \u0110\u1ecdc b\u00e0i vi\u1ebft \u0111\u1ec3 c\u00f9ng t\u00ecm hi\u1ec3u v\u1ec1 Closure, c\u00e1c \u0111\u1eb7c \u0111i\u1ec3m, \u01b0u nh\u01b0\u1ee3c \u0111i\u1ec3m, cho \u0111\u1ebfn nh\u1eefng \u1ee9ng d\u1ee5ng th\u1ef1c t\u1ebf c\u1ee7a Closure trong JavaScript. \u0110\u1ecdc ngay!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Closure-la-gi\"><\/span>Closure l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>Closure trong JavaScript<\/strong> \u0111\u01b0\u1ee3c t\u1ea1o ra khi m\u1ed9t h\u00e0m \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a b\u00ean trong m\u1ed9t h\u00e0m kh\u00e1c, cho ph\u00e9p h\u00e0m b\u00ean trong truy c\u1eadp c\u00e1c bi\u1ebfn v\u00e0 tham s\u1ed1 c\u1ee7a h\u00e0m b\u00ean ngo\u00e0i, ngay c\u1ea3 khi h\u00e0m b\u00ean ngo\u00e0i \u0111\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c thi xong. \u0110i\u1ec1u n\u00e0y x\u1ea3y ra v\u00ec h\u00e0m b\u00ean trong v\u1eabn gi\u1eef m\u1ed9t tham chi\u1ebfu \u0111\u1ebfn m\u00f4i tr\u01b0\u1eddng t\u1eeb v\u1ef1ng (lexical environment) n\u01a1i n\u00f3 \u0111\u01b0\u1ee3c t\u1ea1o ra, t\u1ee9c l\u00e0 n\u00f3 &#8220;ghi nh\u1edb&#8221; tr\u1ea1ng th\u00e1i c\u1ee7a h\u00e0m bao quanh t\u1ea1i th\u1eddi \u0111i\u1ec3m \u0111\u01b0\u1ee3c khai b\u00e1o.<\/p>\n<p>Hi\u1ec3u m\u1ed9t c\u00e1ch \u0111\u01a1n gi\u1ea3n, closure cho ph\u00e9p m\u1ed9t h\u00e0m c\u00f3 th\u1ec3 truy c\u1eadp c\u00e1c bi\u1ebfn thu\u1ed9c ph\u1ea1m vi b\u00ean ngo\u00e0i c\u1ee7a n\u00f3, ngay c\u1ea3 sau khi ph\u1ea1m vi \u0111\u00f3 \u0111\u00e3 k\u1ebft th\u00fac.<\/p>\n<figure id=\"attachment_28332\" aria-describedby=\"caption-attachment-28332\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Closure-la-gi-trong-JavaScript.jpg\" alt=\"Closure l\u00e0 g\u00ec trong JavaScript\" width=\"800\" height=\"500\" class=\"size-full wp-image-28332\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Closure-la-gi-trong-JavaScript.jpg 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Closure-la-gi-trong-JavaScript-300x188.jpg 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Closure-la-gi-trong-JavaScript-768x480.jpg 768w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Closure-la-gi-trong-JavaScript-750x469.jpg 750w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-28332\" class=\"wp-caption-text\">Closure l\u00e0 g\u00ec trong JavaScript<\/figcaption><\/figure>\n<h2><span class=\"ez-toc-section\" id=\"Tai-sao-JavaScript-Closures-lai-quan-trong\"><\/span>T\u1ea1i sao JavaScript Closures l\u1ea1i quan tr\u1ecdng<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><strong>T\u00ednh \u0111\u00f3ng g\u00f3i (Encapsulation):<\/strong> Closures cho ph\u00e9p \u0111\u00f3ng g\u00f3i c\u00e1c bi\u1ebfn trong ph\u1ea1m vi c\u1ee7a m\u1ed9t h\u00e0m, t\u1eeb \u0111\u00f3 gi\u00fap t\u1ed5 ch\u1ee9c m\u00e3 t\u1ed1t h\u01a1n v\u00e0 b\u1ea3o m\u1eadt d\u1eef li\u1ec7u hi\u1ec7u qu\u1ea3 h\u01a1n.<\/li>\n<li><strong>Duy tr\u00ec d\u1eef li\u1ec7u (Data Persistence):<\/strong> Closures cho ph\u00e9p c\u00e1c h\u00e0m b\u00ean trong ti\u1ebfp t\u1ee5c truy c\u1eadp v\u00e0o c\u00e1c bi\u1ebfn c\u1ee7a h\u00e0m b\u00ean ngo\u00e0i ngay c\u1ea3 khi h\u00e0m b\u00ean ngo\u00e0i \u0111\u00e3 th\u1ef1c thi xong, gi\u00fap duy tr\u00ec tr\u1ea1ng th\u00e1i d\u1eef li\u1ec7u.<\/li>\n<li><strong>T\u00ednh m\u00f4-\u0111un (Modularity):<\/strong> Closures gi\u00fap t\u1ea1o ra m\u00e3 c\u00f3 t\u00ednh m\u00f4-\u0111un v\u00e0 d\u1ec5 t\u00e1i s\u1eed d\u1ee5ng, b\u1eb1ng c\u00e1ch cho ph\u00e9p c\u00e1c h\u00e0m truy c\u1eadp v\u00e0o d\u1eef li\u1ec7u v\u00e0 h\u00e0nh vi ri\u00eang t\u01b0.<\/li>\n<li><strong>L\u1eadp tr\u00ecnh h\u00e0m (Functional Programming):<\/strong> Closures \u0111\u00f3ng vai tr\u00f2 quan tr\u1ecdng trong c\u00e1c m\u00f4 h\u00ecnh l\u1eadp tr\u00ecnh h\u00e0m, h\u1ed7 tr\u1ee3 c\u00e1c k\u1ef9 thu\u1eadt nh\u01b0 h\u00e0m b\u1eadc cao (higher-order functions), k\u1ebft h\u1ee3p h\u00e0m (function composition), currying v\u00e0 nhi\u1ec1u k\u1ef9 thu\u1eadt kh\u00e1c.<\/li>\n<li><strong>X\u1eed l\u00fd b\u1ea5t \u0111\u1ed3ng b\u1ed9 (Asynchronous Operations):<\/strong> Closures th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong l\u1eadp tr\u00ecnh b\u1ea5t \u0111\u1ed3ng b\u1ed9 \u0111\u1ec3 qu\u1ea3n l\u00fd tr\u1ea1ng th\u00e1i v\u00e0 d\u1eef li\u1ec7u trong c\u00e1c callback ho\u1eb7c promise.<\/li>\n<li><strong>X\u1eed l\u00fd s\u1ef1 ki\u1ec7n (Event Handling):<\/strong> Closures r\u1ea5t c\u1ea7n thi\u1ebft trong vi\u1ec7c x\u1eed l\u00fd s\u1ef1 ki\u1ec7n c\u1ee7a JavaScript, gi\u00fap g\u00e1n c\u00e1c tr\u00ecnh l\u1eafng nghe s\u1ef1 ki\u1ec7n (event listeners) m\u00e0 v\u1eabn c\u00f3 quy\u1ec1n truy c\u1eadp v\u00e0o c\u00e1c bi\u1ebfn c\u1ee5c b\u1ed9 v\u00e0 tham s\u1ed1.<\/li>\n<li><strong>Qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb (Memory Management):<\/strong> Closures h\u1ed7 tr\u1ee3 qu\u1ea3n l\u00fd b\u1ed9 nh\u1edb hi\u1ec7u qu\u1ea3 b\u1eb1ng c\u00e1ch t\u1ef1 \u0111\u1ed9ng x\u1eed l\u00fd v\u00f2ng \u0111\u1eddi c\u1ee7a bi\u1ebfn v\u00e0 tr\u00e1nh c\u00e1c r\u00f2 r\u1ec9 b\u1ed9 nh\u1edb.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Vi-du-minh-hoa-ve-Closure-trong-JavaScript\"><\/span>V\u00ed d\u1ee5 minh h\u1ecda v\u1ec1 Closure trong JavaScript<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>V\u00ed d\u1ee5 minh h\u1ecda \u0111\u01a1n gi\u1ea3n nh\u1ea5t:<\/strong><\/p>\n<p>JavaScript<\/p>\n<pre><code class=\"language-plaintext\">function outerFunction() {\r\n  let outerVariable = 'Hello Closure!';\r\n\r\n  function innerFunction() {\r\n    console.log(outerVariable); \/\/ innerFunction c\u00f3 th\u1ec3 truy c\u1eadp outerVariable\r\n  }\r\n\r\n  return innerFunction; \/\/ Tr\u1ea3 v\u1ec1 innerFunction (closure)\r\n}\r\n\r\nconst myClosure = outerFunction();\r\nmyClosure(); \/\/ Khi g\u1ecdi myClosure() \u1edf \u0111\u00e2y, n\u00f3 v\u1eabn in ra 'Hello Closure!'\r\n                 \/\/ d\u00f9 outerFunction() \u0111\u00e3 th\u1ef1c thi xong.\r\n<\/code><\/pre>\n<p><strong>Gi\u1ea3i th\u00edch:<\/strong><\/p>\n<p>myClosure l\u00e0 m\u1ed9t closure. N\u00f3 l\u00e0 h\u00e0m innerFunction c\u00f9ng v\u1edbi m\u00f4i tr\u01b0\u1eddng ph\u1ea1m vi c\u1ee7a outerFunction (bao g\u1ed3m outerVariable).<\/p>\n<p><strong>V\u00ed d\u1ee5 v\u1ec1 Counter (Illustrating private state):<\/strong><\/p>\n<p>JavaScript<\/p>\n<pre><code class=\"language-plaintext\">function createCounter() {\r\n  let count = 0; \/\/ \u0110\u00e2y l\u00e0 bi\u1ebfn \"private\"\r\n\r\n  return {\r\n    increment: function() {\r\n      count++;\r\n      console.log(count);\r\n    },\r\n    decrement: function() {\r\n      count--;\r\n      console.log(count);\r\n    },\r\n    getCount: function() {\r\n      return count;\r\n    }\r\n  };\r\n}\r\n\r\nconst counter1 = createCounter();\r\ncounter1.increment(); \/\/ 1\r\ncounter1.increment(); \/\/ 2\r\nconsole.log(counter1.getCount()); \/\/ 2\r\n\r\nconst counter2 = createCounter(); \/\/ M\u1ed9t instance closure kh\u00e1c\r\ncounter2.increment(); \/\/ 1 (count c\u1ee7a counter2 \u0111\u1ed9c l\u1eadp v\u1edbi counter1)\r\n<\/code><\/pre>\n<p><strong>Gi\u1ea3i th\u00edch:<\/strong><\/p>\n<p>M\u1ed7i l\u1ea7n g\u1ecdi createCounter(), m\u1ed9t closure m\u1edbi \u0111\u01b0\u1ee3c t\u1ea1o ra v\u1edbi bi\u1ebfn count ri\u00eang. C\u00e1c h\u00e0m increment, decrement, getCount b\u00ean trong truy c\u1eadp v\u00e0 thao t\u00e1c v\u1edbi bi\u1ebfn count \u0111\u00f3. Bi\u1ebfn count kh\u00f4ng th\u1ec3 truy c\u1eadp tr\u1ef1c ti\u1ebfp t\u1eeb b\u00ean ngo\u00e0i, t\u1ea1o ra hi\u1ec7u \u1ee9ng &#8220;bi\u1ebfn private&#8221;.<\/p>\n<p><strong>V\u00ed d\u1ee5 v\u1ec1 v\u1ea5n \u0111\u1ec1 ph\u1ed5 bi\u1ebfn v\u1edbi v\u00f2ng l\u1eb7p v\u00e0 c\u00e1ch s\u1eed d\u1ee5ng Closure \u0111\u1ec3 kh\u1eafc ph\u1ee5c:<\/strong><\/p>\n<p>JavaScript<\/p>\n<pre><code class=\"language-plaintext\">\/\/ V\u1ea5n \u0111\u1ec1 th\u01b0\u1eddng g\u1eb7p v\u1edbi var trong v\u00f2ng l\u1eb7p (KH\u00d4NG d\u00f9ng Closure)\r\n\/\/ for (var i = 0; i &lt; 3; i++) {\r\n\/\/   setTimeout(function() {\r\n\/\/     console.log(i); \/\/ Lu\u00f4n in ra 3, kh\u00f4ng ph\u1ea3i 0, 1, 2\r\n\/\/   }, 100 * i);\r\n\/\/ }\r\n\r\n\/\/ Kh\u1eafc ph\u1ee5c b\u1eb1ng Closure (s\u1eed d\u1ee5ng IIFE ho\u1eb7c let\/const)\r\nfor (var i = 0; i &lt; 3; i++) {\r\n  (function(index) { \/\/ IIFE t\u1ea1o scope m\u1edbi cho m\u1ed7i l\u1ea7n l\u1eb7p\r\n    setTimeout(function() {\r\n      console.log(index); \/\/ In ra 0, 1, 2\r\n    }, 100 * index);\r\n  })(i); \/\/ Truy\u1ec1n gi\u00e1 tr\u1ecb i v\u00e0o scope m\u1edbi\r\n}\r\n\r\n\/\/ C\u00e1ch hi\u1ec7n \u0111\u1ea1i h\u01a1n v\u1edbi let\/const (t\u1ef1 \u0111\u1ed9ng t\u1ea1o closure\/scope cho m\u1ed7i l\u1ea7n l\u1eb7p)\r\nfor (let j = 0; j &lt; 3; j++) {\r\n   setTimeout(function() {\r\n     console.log(j); \/\/ In ra 0, 1, 2\r\n   }, 100 * j);\r\n}\r\n<\/code><\/pre>\n<p><strong>Gi\u1ea3i th\u00edch:<\/strong><\/p>\n<p>V\u1edbi var, bi\u1ebfn i c\u00f3 ph\u1ea1m vi to\u00e0n c\u1ee5c ho\u1eb7c h\u00e0m. H\u00e0m setTimeout b\u00ean trong closure tham chi\u1ebfu \u0111\u1ebfn c\u00f9ng m\u1ed9t bi\u1ebfn i. Khi setTimeout callback th\u1ef1c thi, v\u00f2ng l\u1eb7p \u0111\u00e3 k\u1ebft th\u00fac v\u00e0 i c\u00f3 gi\u00e1 tr\u1ecb cu\u1ed1i c\u00f9ng (3).<\/p>\n<p>B\u1eb1ng c\u00e1ch s\u1eed d\u1ee5ng IIFE (Immediately Invoked Function Expression) ho\u1eb7c \u0111\u01a1n gi\u1ea3n l\u00e0 let\/const trong v\u00f2ng l\u1eb7p for (t\u1eeb ES6), ch\u00fang ta t\u1ea1o ra m\u1ed9t ph\u1ea1m vi m\u1edbi cho m\u1ed7i l\u1ea7n l\u1eb7p, v\u00e0 closure b\u00ean trong ghi nh\u1edb gi\u00e1 tr\u1ecb c\u1ee7a bi\u1ebfn trong ph\u1ea1m vi c\u1ee5 th\u1ec3 \u0111\u00f3.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cac-dac-diem-cua-Closure-trong-JavaScript\"><\/span>C\u00e1c \u0111\u1eb7c \u0111i\u1ec3m c\u1ee7a Closure trong JavaScript<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Sau khi hi\u1ec3u \u0111\u1ecbnh ngh\u0129a c\u01a1 b\u1ea3n Closure l\u00e0 g\u00ec v\u00e0 c\u00e1c v\u00ed d\u1ee5 c\u1ee7a Closure, \u0111i\u1ec1u quan tr\u1ecdng l\u00e0 n\u1eafm \u0111\u01b0\u1ee3c nh\u1eefng \u0111\u1eb7c \u0111i\u1ec3m c\u1ed1t l\u00f5i t\u1ea1o n\u00ean Closure. \u0110\u00e2y l\u00e0 nh\u1eefng t\u00ednh ch\u1ea5t gi\u00fap ph\u00e2n bi\u1ec7t v\u00e0 hi\u1ec3u r\u00f5 c\u00e1ch Closure ho\u1ea1t \u0111\u1ed9ng trong th\u1ef1c t\u1ebf l\u1eadp tr\u00ecnh JavaScript.<\/p>\n<p>\u0110\u1eb7c \u0111i\u1ec3m then ch\u1ed1t nh\u1ea5t l\u00e0 kh\u1ea3 n\u0103ng c\u1ee7a m\u1ed9t h\u00e0m &#8220;ghi nh\u1edb&#8221; v\u00e0 <strong>truy c\u1eadp v\u00e0o c\u00e1c bi\u1ebfn t\u1eeb ph\u1ea1m vi b\u00ean ngo\u00e0i<\/strong> (outer scope) n\u01a1i n\u00f3 \u0111\u01b0\u1ee3c khai b\u00e1o. Kh\u1ea3 n\u0103ng n\u00e0y v\u1eabn t\u1ed3n t\u1ea1i b\u1ec1n v\u1eefng ngay c\u1ea3 sau khi h\u00e0m b\u00ean ngo\u00e0i \u0111\u00e3 k\u1ebft th\u00fac qu\u00e1 tr\u00ecnh th\u1ef1c thi c\u1ee7a m\u00ecnh.<\/p>\n<p>Ch\u00ednh l\u00e0 vi\u1ec7c duy tr\u00ec li\u00ean k\u1ebft \u0111\u1ebfn m\u00f4i tr\u01b0\u1eddng ph\u1ea1m vi t\u1eeb v\u1ef1ng (Lexical Scope) c\u1ee7a h\u00e0m cha. Lexical Scope x\u00e1c \u0111\u1ecbnh bi\u1ebfn n\u00e0o c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c truy c\u1eadp d\u1ef1a tr\u00ean v\u1ecb tr\u00ed code, v\u00e0 closure b\u1ea3o t\u1ed3n m\u00f4i tr\u01b0\u1eddng n\u00e0y.<\/p>\n<figure id=\"attachment_28333\" aria-describedby=\"caption-attachment-28333\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-dac-diem-cua-Closure-trong-JavaScript.jpg\" alt=\"C\u00e1c \u0111\u1eb7c \u0111i\u1ec3m c\u1ee7a Closure trong JavaScript\" width=\"800\" height=\"500\" class=\"size-full wp-image-28333\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-dac-diem-cua-Closure-trong-JavaScript.jpg 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-dac-diem-cua-Closure-trong-JavaScript-300x188.jpg 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-dac-diem-cua-Closure-trong-JavaScript-768x480.jpg 768w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-dac-diem-cua-Closure-trong-JavaScript-750x469.jpg 750w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-28333\" class=\"wp-caption-text\">C\u00e1c \u0111\u1eb7c \u0111i\u1ec3m c\u1ee7a Closure trong JavaScript<\/figcaption><\/figure>\n<p>M\u1ed9t \u0111\u1eb7c \u0111i\u1ec3m quan tr\u1ecdng kh\u00e1c l\u00e0 <strong>s\u1ef1 k\u1ebft h\u1ee3p gi\u1eefa h\u00e0m \u0111\u00f3 v\u00e0 m\u00f4i tr\u01b0\u1eddng ph\u1ea1m vi c\u1ee7a n\u00f3<\/strong>. Closure kh\u00f4ng ch\u1ec9 l\u00e0 m\u00e3 l\u1ec7nh c\u1ee7a h\u00e0m con, m\u00e0 c\u00f2n l\u00e0 &#8220;t\u00fai \u0111\u1ed3&#8221; ch\u1ee9a c\u00e1c bi\u1ebfn t\u1eeb ph\u1ea1m vi cha m\u00e0 n\u00f3 c\u00f3 quy\u1ec1n truy c\u1eadp.<\/p>\n<p>H\u01a1n n\u1eefa, m\u1ed7i l\u1ea7n g\u1ecdi h\u00e0m b\u00ean ngo\u00e0i<strong> t\u1ea1o ra m\u1ed9t phi\u00ean b\u1ea3n closure \u0111\u1ed9c l\u1eadp<\/strong>. M\u1ed7i phi\u00ean b\u1ea3n closure n\u00e0y s\u1ebd c\u00f3 m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c bi\u1ebfn t\u1eeb ph\u1ea1m vi cha ri\u00eang bi\u1ec7t, kh\u00f4ng chia s\u1ebb tr\u1ea1ng th\u00e1i v\u1edbi c\u00e1c instance closure kh\u00e1c.<\/p>\n<p>Nh\u1edd nh\u1eefng \u0111\u1eb7c \u0111i\u1ec3m \u0111\u1ed9c \u0111\u00e1o n\u00e0y, Closure mang l\u1ea1i s\u1ee9c m\u1ea1nh to l\u1edbn trong vi\u1ec7c qu\u1ea3n l\u00fd tr\u1ea1ng th\u00e1i v\u00e0 t\u1ea1o ra c\u00e1c c\u1ea5u tr\u00fac d\u1eef li\u1ec7u ph\u1ee9c t\u1ea1p trong JavaScript. \u0110\u00e2y l\u00e0 n\u1ec1n t\u1ea3ng cho nhi\u1ec1u k\u1ef9 thu\u1eadt l\u1eadp tr\u00ecnh hi\u1ec7n \u0111\u1ea1i.<\/p>\n<p>Vi\u1ec7c n\u1eafm r\u00f5 c\u00e1c \u0111\u1eb7c \u0111i\u1ec3m n\u00e0y l\u00e0 b\u01b0\u1edbc \u0111\u1ec7m quan tr\u1ecdng \u0111\u1ec3 hi\u1ec3u s\u00e2u h\u01a1n v\u1ec1 c\u01a1 ch\u1ebf ho\u1ea1t \u0111\u1ed9ng c\u1ee7a Closure v\u00e0 c\u00e1ch \u00e1p d\u1ee5ng n\u00f3 qua c\u00e1c v\u00ed d\u1ee5 c\u1ee5 th\u1ec3 m\u00e0 ch\u00fang ta s\u1ebd kh\u00e1m ph\u00e1 ti\u1ebfp theo.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Uu-va-nhuoc-diem-cua-Closures-trong-JavaScript\"><\/span>\u01afu v\u00e0 nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a Closures trong JavaScript<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Uu-diem-cua-JavaScript-Closures\"><\/span>\u01afu \u0111i\u1ec3m c\u1ee7a JavaScript Closures<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>\u0110\u00f3ng g\u00f3i d\u1eef li\u1ec7u:<\/strong> Closures cho ph\u00e9p t\u1ea1o ra c\u00e1c bi\u1ebfn v\u00e0 ph\u01b0\u01a1ng th\u1ee9c ri\u00eang t\u01b0, gi\u00fap b\u1ea3o m\u1eadt d\u1eef li\u1ec7u v\u00e0 ng\u0103n ch\u1eb7n vi\u1ec7c truy c\u1eadp hay thay \u0111\u1ed5i kh\u00f4ng mong mu\u1ed1n.<\/li>\n<li><strong>T\u00ednh linh ho\u1ea1t:<\/strong> Closures mang \u0111\u1ebfn s\u1ef1 linh ho\u1ea1t trong thi\u1ebft k\u1ebf m\u00e3 b\u1eb1ng c\u00e1ch cho ph\u00e9p t\u1ea1o c\u00e1c h\u00e0m v\u00e0 h\u00e0nh vi \u0111\u1eb7c bi\u1ec7t ph\u00f9 h\u1ee3p v\u1edbi t\u1eebng y\u00eau c\u1ea7u c\u1ee5 th\u1ec3.<\/li>\n<li><strong>T\u00e1i s\u1eed d\u1ee5ng m\u00e3:<\/strong> Closures gi\u00fap t\u0103ng kh\u1ea3 n\u0103ng t\u00e1i s\u1eed d\u1ee5ng m\u00e3 b\u1eb1ng c\u00e1ch \u0111\u00f3ng g\u00f3i c\u00e1c m\u1eabu h\u00e0nh vi ph\u1ed5 bi\u1ebfn v\u00e0o trong c\u00e1c h\u00e0m c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng l\u1ea1i.<\/li>\n<li><strong>Gi\u1ea3m \u00f4 nhi\u1ec5m ph\u1ea1m vi to\u00e0n c\u1ee5c:<\/strong> Closures gi\u00fap gi\u1ea3m vi\u1ec7c khai b\u00e1o bi\u1ebfn ho\u1eb7c h\u00e0m trong ph\u1ea1m vi to\u00e0n c\u1ee5c, t\u1eeb \u0111\u00f3 tr\u00e1nh xung \u0111\u1ed9t v\u00e0 t\u0103ng t\u00ednh \u1ed5n \u0111\u1ecbnh c\u1ee7a ch\u01b0\u01a1ng tr\u00ecnh.<\/li>\n<\/ul>\n<h3><span class=\"ez-toc-section\" id=\"Nhuoc-diem-cua-JavaScript-Closures\"><\/span>Nh\u01b0\u1ee3c \u0111i\u1ec3m c\u1ee7a JavaScript Closures<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><strong>Ti\u00eau t\u1ed1n b\u1ed9 nh\u1edb:<\/strong> Closures c\u00f3 th\u1ec3 ti\u00eau t\u1ed1n nhi\u1ec1u b\u1ed9 nh\u1edb h\u01a1n, \u0111\u1eb7c bi\u1ec7t khi ch\u00fang gi\u1eef tham chi\u1ebfu \u0111\u1ebfn c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng l\u1edbn ho\u1eb7c bi\u1ebfn s\u1ed1ng l\u00e2u.<\/li>\n<li><strong>T\u0103ng chi ph\u00ed hi\u1ec7u n\u0103ng:<\/strong> Trong m\u1ed9t s\u1ed1 tr\u01b0\u1eddng h\u1ee3p, closures c\u00f3 th\u1ec3 l\u00e0m gi\u1ea3m hi\u1ec7u n\u0103ng, nh\u1ea5t l\u00e0 khi \u0111\u01b0\u1ee3c t\u1ea1o li\u00ean t\u1ee5c b\u00ean trong c\u00e1c kh\u1ed1i m\u00e3 \u0111\u01b0\u1ee3c th\u1ef1c thi th\u01b0\u1eddng xuy\u00ean ho\u1eb7c c\u00f3 nhi\u1ec1u h\u00e0m l\u1ed3ng nhau.<\/li>\n<li><strong>R\u00f2 r\u1ec9 b\u1ed9 nh\u1edb:<\/strong> Closures c\u00f3 th\u1ec3 gi\u1eef l\u1ea1i tham chi\u1ebfu \u0111\u1ebfn bi\u1ebfn kh\u00f4ng c\u1ea7n thi\u1ebft, d\u1eabn \u0111\u1ebfn ti\u00eau t\u1ed1n th\u00eam b\u1ed9 nh\u1edb ho\u1eb7c r\u00f2 r\u1ec9 n\u1ebfu kh\u00f4ng gi\u1ea3i ph\u00f3ng \u0111\u00fang.<\/li>\n<li><strong>Kh\u00f3 debug h\u01a1n:<\/strong> Vi\u1ec7c s\u1eed d\u1ee5ng closures, \u0111\u1eb7c bi\u1ec7t l\u00e0 khi ch\u00fang \u0111\u01b0\u1ee3c l\u1ed3ng nhau ho\u1eb7c gi\u1eef c\u00e1c bi\u1ebfn c\u00f3 th\u1ec3 thay \u0111\u1ed5i, c\u00f3 th\u1ec3 g\u00e2y kh\u00f3 kh\u0103n trong qu\u00e1 tr\u00ecnh g\u1ee1 l\u1ed7i.<\/li>\n<li><strong>G\u00e2y \u00f4 nhi\u1ec5m chu\u1ed7i ph\u1ea1m vi (scope chain):<\/strong> Closures c\u00f3 th\u1ec3 v\u00f4 t\u00ecnh gi\u1eef l\u1ea1i tham chi\u1ebfu \u0111\u1ebfn c\u00e1c bi\u1ebfn v\u01b0\u1ee3t ra ngo\u00e0i v\u00f2ng \u0111\u1eddi d\u1ef1 ki\u1ebfn, d\u1eabn \u0111\u1ebfn h\u00e0nh vi kh\u00f4ng mong \u0111\u1ee3i ho\u1eb7c r\u00f2 r\u1ec9 b\u1ed9 nh\u1edb.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Cac-truong-hop-su-dung-Closure-pho-bien\"><\/span>C\u00e1c tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng Closure ph\u1ed5 bi\u1ebfn<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>B\u1ea1n \u0111\u00e3 hi\u1ec3u Closure l\u00e0 g\u00ec v\u00e0 c\u00e1ch n\u00f3 ho\u1ea1t \u0111\u1ed9ng. Gi\u1edd l\u00e0 l\u00fac kh\u00e1m ph\u00e1 s\u1ee9c m\u1ea1nh th\u1ef1c t\u1ebf c\u1ee7a n\u00f3. Closure kh\u00f4ng ch\u1ec9 l\u00e0 l\u00fd thuy\u1ebft, m\u00e0 \u0111\u01b0\u1ee3c \u1ee9ng d\u1ee5ng c\u1ef1c k\u1ef3 ph\u1ed5 bi\u1ebfn trong c\u00e1c k\u1ef9 thu\u1eadt l\u1eadp tr\u00ecnh JavaScript hi\u1ec7n \u0111\u1ea1i h\u00e0ng ng\u00e0y.<\/p>\n<p>Ch\u00ednh nh\u1edd kh\u1ea3 n\u0103ng &#8220;ghi nh\u1edb&#8221; m\u00f4i tr\u01b0\u1eddng ph\u1ea1m vi n\u01a1i n\u00f3 \u0111\u01b0\u1ee3c t\u1ea1o ra, Closure cho ph\u00e9p ch\u00fang ta gi\u1eef l\u1ea1i v\u00e0 thao t\u00e1c v\u1edbi d\u1eef li\u1ec7u (bi\u1ebfn, h\u00e0m) t\u1eeb b\u00ean ngo\u00e0i. \u0110\u1eb7c \u0111i\u1ec3m n\u00e0y l\u00e0 ch\u00eca kh\u00f3a cho nhi\u1ec1u \u1ee9ng d\u1ee5ng th\u1ef1c t\u1ebf quan tr\u1ecdng, gi\u00fap code linh ho\u1ea1t v\u00e0 c\u00f3 c\u1ea5u tr\u00fac h\u01a1n.<\/p>\n<p>D\u01b0\u1edbi \u0111\u00e2y l\u00e0 m\u1ed9t s\u1ed1 tr\u01b0\u1eddng h\u1ee3p v\u00e0 k\u1ef9 thu\u1eadt l\u1eadp tr\u00ecnh ph\u1ed5 bi\u1ebfn m\u00e0 Closure \u0111\u00f3ng vai tr\u00f2 c\u1ed1t l\u00f5i. Vi\u1ec7c hi\u1ec3u r\u00f5 ch\u00fang s\u1ebd gi\u00fap b\u1ea1n \u00e1p d\u1ee5ng Closure m\u1ed9t c\u00e1ch hi\u1ec7u qu\u1ea3 v\u00e0 t\u1ef1 tin h\u01a1n trong c\u00e1c d\u1ef1 \u00e1n JavaScript th\u1ef1c t\u1ebf c\u1ee7a m\u00ecnh.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Tao-bien-%E2%80%9CPrivate%E2%80%9D-bang-Closure\"><\/span>T\u1ea1o bi\u1ebfn &#8220;Private&#8221; b\u1eb1ng Closure<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Closure l\u00e0 c\u00e1ch ph\u1ed5 bi\u1ebfn \u0111\u1ec3 t\u1ea1o ra bi\u1ebfn &#8220;private&#8221; trong JavaScript, v\u1ed1n kh\u00f4ng h\u1ed7 tr\u1ee3 modifier private truy\u1ec1n th\u1ed1ng nh\u01b0 c\u00e1c ng\u00f4n ng\u1eef kh\u00e1c. Bi\u1ebfn \u0111\u01b0\u1ee3c khai b\u00e1o trong h\u00e0m ngo\u00e0i, v\u00e0 h\u00e0m con (closure) \u0111\u01b0\u1ee3c tr\u1ea3 v\u1ec1 c\u00f3 th\u1ec3 truy c\u1eadp bi\u1ebfn \u0111\u00f3.<\/p>\n<p>T\u1eeb b\u00ean ngo\u00e0i, bi\u1ebfn n\u00e0y kh\u00f4ng th\u1ec3 b\u1ecb truy c\u1eadp tr\u1ef1c ti\u1ebfp, ch\u1ec9 th\u00f4ng qua c\u00e1c h\u00e0m public \u0111\u01b0\u1ee3c tr\u1ea3 v\u1ec1. \u0110i\u1ec1u n\u00e0y gi\u00fap b\u1ea3o v\u1ec7 d\u1eef li\u1ec7u v\u00e0 ki\u1ec3m so\u00e1t quy\u1ec1n truy c\u1eadp. V\u00ed d\u1ee5 kinh \u0111i\u1ec3n l\u00e0 h\u00e0m t\u1ea1o counter.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Module-Pattern-co-dien\"><\/span>Module Pattern c\u1ed5 \u0111i\u1ec3n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Module Pattern l\u00e0 m\u1ed9t m\u1eabu thi\u1ebft k\u1ebf ph\u1ed5 bi\u1ebfn s\u1eed d\u1ee5ng Closure \u0111\u1ec3 \u0111\u00f3ng g\u00f3i (encapsulate) code v\u00e0 d\u1eef li\u1ec7u. N\u00f3 cho ph\u00e9p gi\u1eef c\u00e1c bi\u1ebfn v\u00e0 h\u00e0m \u1edf ch\u1ebf \u0111\u1ed9 &#8220;private&#8221; b\u00ean trong module, ch\u1ec9 hi\u1ec3n th\u1ecb ra b\u00ean ngo\u00e0i m\u1ed9t giao di\u1ec7n c\u00f4ng khai (public API) th\u00f4ng qua \u0111\u1ed1i t\u01b0\u1ee3ng \u0111\u01b0\u1ee3c tr\u1ea3 v\u1ec1.<\/p>\n<p>Closure b\u1ea3o to\u00e0n tr\u1ea1ng th\u00e1i private n\u00e0y gi\u1eefa c\u00e1c l\u1ea7n g\u1ecdi h\u00e0m trong module, t\u1ea1o ra c\u00e1c module \u0111\u1ed9c l\u1eadp, d\u1ec5 qu\u1ea3n l\u00fd.<\/p>\n<figure id=\"attachment_28334\" aria-describedby=\"caption-attachment-28334\" style=\"width: 800px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-truong-hop-su-dung-Closure-pho-bien.jpg\" alt=\"C\u00e1c tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng Closure ph\u1ed5 bi\u1ebfn\" width=\"800\" height=\"500\" class=\"size-full wp-image-28334\" title=\"\" srcset=\"https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-truong-hop-su-dung-Closure-pho-bien.jpg 800w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-truong-hop-su-dung-Closure-pho-bien-300x188.jpg 300w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-truong-hop-su-dung-Closure-pho-bien-768x480.jpg 768w, https:\/\/interdata.vn\/blog\/wp-content\/uploads\/2025\/05\/Cac-truong-hop-su-dung-Closure-pho-bien-750x469.jpg 750w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption id=\"caption-attachment-28334\" class=\"wp-caption-text\">C\u00e1c tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng Closure ph\u1ed5 bi\u1ebfn<\/figcaption><\/figure>\n<h3><span class=\"ez-toc-section\" id=\"Su-dung-Closure-trong-Callback-va-Event-Handler\"><\/span>S\u1eed d\u1ee5ng Closure trong Callback v\u00e0 Event Handler<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Callback functions v\u00e0 c\u00e1c h\u00e0m x\u1eed l\u00fd s\u1ef1 ki\u1ec7n (event handlers) th\u01b0\u1eddng \u0111\u01b0\u1ee3c th\u1ef1c thi kh\u00f4ng \u0111\u1ed3ng b\u1ed9 (asynchronously) ho\u1eb7c \u1edf m\u1ed9t ng\u1eef c\u1ea3nh kh\u00e1c. Closure cho ph\u00e9p c\u00e1c h\u00e0m n\u00e0y &#8220;ghi nh\u1edb&#8221; m\u00f4i tr\u01b0\u1eddng v\u00e0 c\u00e1c bi\u1ebfn c\u1ee5c b\u1ed9 n\u01a1i ch\u00fang \u0111\u01b0\u1ee3c t\u1ea1o ra.<\/p>\n<p>\u0110i\u1ec1u n\u00e0y \u0111\u1ea3m b\u1ea3o khi callback \u0111\u01b0\u1ee3c g\u1ecdi sau n\u00e0y, n\u00f3 v\u1eabn c\u00f3 quy\u1ec1n truy c\u1eadp v\u00e0o d\u1eef li\u1ec7u c\u1ea7n thi\u1ebft t\u1eeb ph\u1ea1m vi ban \u0111\u1ea7u. V\u00ed d\u1ee5 ph\u1ed5 bi\u1ebfn l\u00e0 trong <code>setTimeout<\/code> ho\u1eb7c khi l\u1eb7p qua c\u00e1c ph\u1ea7n t\u1eed v\u00e0 g\u1eafn event listener m\u00e0 c\u1ea7n truy c\u1eadp bi\u1ebfn ch\u1ec9 m\u1ee5c.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Currying-va-Partial-Application\"><\/span>Currying v\u00e0 Partial Application<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Trong l\u1eadp tr\u00ecnh h\u00e0m (functional programming), Currying v\u00e0 Partial Application l\u00e0 c\u00e1c k\u1ef9 thu\u1eadt bi\u1ebfn \u0111\u1ed5i h\u00e0m d\u1ef1a tr\u00ean Closure. Ch\u00fang cho ph\u00e9p b\u1ea1n t\u1ea1o ra c\u00e1c h\u00e0m m\u1edbi b\u1eb1ng c\u00e1ch &#8220;ghi nh\u1edb&#8221; m\u1ed9t ho\u1eb7c nhi\u1ec1u \u0111\u1ed1i s\u1ed1 ban \u0111\u1ea7u th\u00f4ng qua Closure. H\u00e0m m\u1edbi n\u00e0y sau \u0111\u00f3 ch\u1edd c\u00e1c \u0111\u1ed1i s\u1ed1 c\u00f2n l\u1ea1i \u0111\u1ec3 th\u1ef1c thi. Closure l\u01b0u gi\u1eef c\u00e1c \u0111\u1ed1i s\u1ed1 \u0111\u00e3 truy\u1ec1n gi\u1eefa c\u00e1c l\u1ea7n g\u1ecdi.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Factory-Functions\"><\/span>Factory Functions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Factory Function l\u00e0 h\u00e0m t\u1ea1o ra v\u00e0 tr\u1ea3 v\u1ec1 c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng. Closure th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng b\u00ean trong Factory Function \u0111\u1ec3 qu\u1ea3n l\u00fd tr\u1ea1ng th\u00e1i n\u1ed9i b\u1ed9 (internal state) cho t\u1eebng \u0111\u1ed1i t\u01b0\u1ee3ng \u0111\u01b0\u1ee3c t\u1ea1o ra.<\/p>\n<p>M\u1ed7i \u0111\u1ed1i t\u01b0\u1ee3ng \u0111\u01b0\u1ee3c tr\u1ea3 v\u1ec1 c\u00f3 th\u1ec3 c\u00f3 c\u00e1c ph\u01b0\u01a1ng th\u1ee9c b\u00ean trong s\u1eed d\u1ee5ng closure \u0111\u1ec3 truy c\u1eadp v\u00e0 thay \u0111\u1ed5i tr\u1ea1ng th\u00e1i ri\u00eang c\u1ee7a n\u00f3, t\u00e1ch bi\u1ec7t v\u1edbi c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng kh\u00e1c t\u1eeb c\u00f9ng factory.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"5-dieu-trong-JavaScript-Closures\"><\/span>5 \u0111i\u1ec1u trong JavaScript Closures<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><strong>Ph\u1ea1m vi t\u1eeb v\u1ef1ng (Lexical Scope):<\/strong> Closures trong JavaScript tu\u00e2n theo quy t\u1eafc ph\u1ea1m vi t\u1eeb v\u1ef1ng, ngh\u0129a l\u00e0 ph\u1ea1m vi c\u1ee7a m\u1ed9t bi\u1ebfn \u0111\u01b0\u1ee3c x\u00e1c \u0111\u1ecbnh d\u1ef1a tr\u00ean v\u1ecb tr\u00ed c\u1ee7a n\u00f3 trong m\u00e3 ngu\u1ed3n.<\/li>\n<li><strong>Thu gom r\u00e1c (Garbage Collection):<\/strong> Closures c\u00f3 th\u1ec3 \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn qu\u00e1 tr\u00ecnh thu gom r\u00e1c trong JavaScript, v\u00ec c\u00e1c bi\u1ebfn \u0111\u01b0\u1ee3c tham chi\u1ebfu trong closures s\u1ebd kh\u00f4ng b\u1ecb thu gom cho \u0111\u1ebfn khi closure kh\u00f4ng c\u00f2n \u0111\u01b0\u1ee3c truy c\u1eadp n\u1eefa.<\/li>\n<li><strong>R\u00e0ng bu\u1ed9c bi\u1ebfn (Binding):<\/strong> Closures gi\u1eef l\u1ea1i tham chi\u1ebfu \u0111\u1ebfn c\u00e1c bi\u1ebfn trong ph\u1ea1m vi b\u00ean ngo\u00e0i t\u1ea1i th\u1eddi \u0111i\u1ec3m closure \u0111\u01b0\u1ee3c t\u1ea1o ra, ch\u1ee9 kh\u00f4ng ph\u1ea3i t\u1ea1i th\u1eddi \u0111i\u1ec3m n\u00f3 \u0111\u01b0\u1ee3c th\u1ef1c thi.<\/li>\n<li><strong>Ng\u1eef c\u1ea3nh (Context):<\/strong> Closures kh\u00f4ng ch\u1ec9 ghi nh\u1edb c\u00e1c bi\u1ebfn trong ph\u1ea1m vi b\u00ean ngo\u00e0i m\u00e0 c\u00f2n gi\u1eef l\u1ea1i ng\u1eef c\u1ea3nh khi ch\u00fang \u0111\u01b0\u1ee3c t\u1ea1o ra, bao g\u1ed3m c\u1ea3 gi\u00e1 tr\u1ecb c\u1ee7a <code>this<\/code> t\u1ea1i th\u1eddi \u0111i\u1ec3m \u0111\u00f3.<\/li>\n<li><strong>T\u00ednh linh ho\u1ea1t (Dynamic Nature):<\/strong> Closures trong JavaScript r\u1ea5t linh ho\u1ea1t v\u00e0 c\u00f3 th\u1ec3 thay \u0111\u1ed5i h\u00e0nh vi c\u0169ng nh\u01b0 c\u00e1c bi\u1ebfn \u0111\u01b0\u1ee3c gi\u1eef l\u1ea1i ngay trong th\u1eddi gian ch\u1ea1y (runtime).<\/li>\n<\/ul>\n<p>Closures l\u00e0 m\u1ed9t kh\u00e1i ni\u1ec7m c\u1ed1t l\u00f5i trong JavaScript, \u0111\u00f3ng vai tr\u00f2 quan tr\u1ecdng v\u00e0 mang l\u1ea1i nhi\u1ec1u \u1ee9ng d\u1ee5ng th\u1ef1c ti\u1ec5n trong ph\u00e1t tri\u1ec3n web hi\u1ec7n \u0111\u1ea1i. Ch\u00fang cho ph\u00e9p l\u1eadp tr\u00ecnh vi\u00ean vi\u1ebft m\u00e3 s\u1ea1ch h\u01a1n, c\u00f3 c\u1ea5u tr\u00fac r\u00f5 r\u00e0ng v\u00e0 hi\u1ec7u qu\u1ea3 h\u01a1n th\u00f4ng qua vi\u1ec7c \u0111\u00f3ng g\u00f3i bi\u1ebfn v\u00e0 h\u00e0nh vi b\u00ean trong ph\u1ea1m vi c\u1ee7a h\u00e0m.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cac-cau-hoi-thuong-gap-ve-Closure-trong-JavaScript\"><\/span>C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Closure trong JavaScript<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"Closure-khac-gi-Scope\"><\/span>Closure kh\u00e1c g\u00ec Scope?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>M\u1ed1i quan h\u1ec7 gi\u1eefa Closure v\u00e0 Scope l\u00e0 m\u1ed9t trong nh\u1eefng \u0111i\u1ec3m d\u1ec5 nh\u1ea7m l\u1eabn. Hi\u1ec3u \u0111\u01a1n gi\u1ea3n, Scope (ph\u1ea1m vi) l\u00e0 n\u01a1i bi\u1ebfn \u0111\u01b0\u1ee3c \u0111\u1ecbnh ngh\u0129a v\u00e0 c\u00f3 th\u1ec3 truy c\u1eadp t\u1ea1i m\u1ed9t th\u1eddi \u0111i\u1ec3m nh\u1ea5t \u0111\u1ecbnh trong code. JavaScript c\u00f3 Global Scope, Function Scope v\u00e0 Block Scope (v\u1edbi <code>let<\/code>, <code>const<\/code>).<\/p>\n<p>C\u00f2n Closure l\u1ea1i l\u00e0 kh\u1ea3 n\u0103ng c\u1ee7a m\u1ed9t h\u00e0m ghi nh\u1edb v\u00e0 truy c\u1eadp c\u00e1i Scope b\u00ean ngo\u00e0i (Lexical Scope) n\u01a1i n\u00f3 \u0111\u01b0\u1ee3c t\u1ea1o ra, ngay c\u1ea3 khi Scope \u0111\u00f3 kh\u00f4ng c\u00f2n ho\u1ea1t \u0111\u1ed9ng (v\u00ed d\u1ee5: h\u00e0m cha \u0111\u00e3 ch\u1ea1y xong). Closure d\u1ef1a tr\u00ean Scope, nh\u01b0ng n\u00f3 l\u00e0 m\u1ed9t c\u01a1 ch\u1ebf duy tr\u00ec quy\u1ec1n truy c\u1eadp \u0111\u00f3 qua th\u1eddi gian v\u00e0 ng\u1eef c\u1ea3nh kh\u00e1c nhau.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Su-dung-Closure-co-gay-ro-ri-bo-nho-khong\"><\/span>S\u1eed d\u1ee5ng Closure c\u00f3 g\u00e2y r\u00f2 r\u1ec9 b\u1ed9 nh\u1edb kh\u00f4ng?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>C\u00f3, s\u1eed d\u1ee5ng Closure kh\u00f4ng c\u1ea9n th\u1eadn c\u00f3 th\u1ec3 d\u1eabn \u0111\u1ebfn r\u00f2 r\u1ec9 b\u1ed9 nh\u1edb (memory leak). R\u00f2 r\u1ec9 x\u1ea3y ra khi m\u1ed9t Closure gi\u1eef tham chi\u1ebfu \u0111\u1ebfn c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng l\u1edbn trong ph\u1ea1m vi cha m\u00e0 th\u1ef1c t\u1ebf kh\u00f4ng c\u1ea7n d\u00f9ng \u0111\u1ebfn, khi\u1ebfn ch\u00fang kh\u00f4ng \u0111\u01b0\u1ee3c gi\u1ea3i ph\u00f3ng b\u1edfi Garbage Collector (b\u1ed9 d\u1ecdn r\u00e1c t\u1ef1 \u0111\u1ed9ng c\u1ee7a JS).<\/p>\n<p>\u0110\u1ec3 tr\u00e1nh r\u00f2 r\u1ec9, h\u00e3y \u0111\u1ea3m b\u1ea3o r\u1eb1ng c\u00e1c tham chi\u1ebfu \u0111\u1ebfn Closure (v\u00ed d\u1ee5: event listener g\u1eafn v\u00e0o DOM element) \u0111\u01b0\u1ee3c d\u1ecdn d\u1eb9p (unmounted\/removed) khi kh\u00f4ng c\u1ea7n thi\u1ebft n\u1eefa. Trong h\u1ea7u h\u1ebft c\u00e1c tr\u01b0\u1eddng h\u1ee3p s\u1eed d\u1ee5ng Closure th\u00f4ng th\u01b0\u1eddng v\u00e0 \u0111\u00fang c\u00e1ch, JavaScript Engine \u0111\u1ee7 th\u00f4ng minh \u0111\u1ec3 ch\u1ec9 gi\u1eef l\u1ea1i nh\u1eefng bi\u1ebfn m\u00e0 Closure th\u1ef1c s\u1ef1 c\u1ea7n, gi\u1ea3m thi\u1ec3u nguy c\u01a1 r\u00f2 r\u1ec9.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Van-de-thuong-gap-voi-Closure-trong-vong-lap-la-gi\"><\/span>V\u1ea5n \u0111\u1ec1 th\u01b0\u1eddng g\u1eb7p v\u1edbi Closure trong v\u00f2ng l\u1eb7p l\u00e0 g\u00ec?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>V\u1ea5n \u0111\u1ec1 kinh \u0111i\u1ec3n x\u1ea3y ra khi s\u1eed d\u1ee5ng var trong v\u00f2ng l\u1eb7p for \u0111\u1ec3 t\u1ea1o ra m\u1ed9t lo\u1ea1t c\u00e1c h\u00e0m (v\u00ed d\u1ee5: v\u1edbi setTimeout ho\u1eb7c g\u1eafn event listener). Bi\u1ebfn i \u0111\u01b0\u1ee3c khai b\u00e1o v\u1edbi var c\u00f3 ph\u1ea1m vi l\u00e0 to\u00e0n b\u1ed9 h\u00e0m ho\u1eb7c global, kh\u00f4ng ph\u1ea3i ph\u1ea1m vi kh\u1ed1i cho m\u1ed7i l\u1ea7n l\u1eb7p.<\/p>\n<p>K\u1ebft qu\u1ea3 l\u00e0 t\u1ea5t c\u1ea3 c\u00e1c h\u00e0m Closure \u0111\u01b0\u1ee3c t\u1ea1o ra trong v\u00f2ng l\u1eb7p \u0111\u1ec1u tham chi\u1ebfu \u0111\u1ebfn c\u00f9ng m\u1ed9t bi\u1ebfn i duy nh\u1ea5t. Khi c\u00e1c h\u00e0m n\u00e0y th\u1ef1c thi sau n\u00e0y, bi\u1ebfn i \u0111\u00e3 c\u00f3 gi\u00e1 tr\u1ecb cu\u1ed1i c\u00f9ng c\u1ee7a v\u00f2ng l\u1eb7p. Do \u0111\u00f3, t\u1ea5t c\u1ea3 c\u00e1c Closure \u0111\u1ec1u truy c\u1eadp v\u00e0 s\u1eed d\u1ee5ng c\u00f9ng gi\u00e1 tr\u1ecb cu\u1ed1i c\u00f9ng \u0111\u00f3, kh\u00f4ng ph\u1ea3i gi\u00e1 tr\u1ecb i c\u1ee7a t\u1eebng l\u1ea7n l\u1eb7p ri\u00eang bi\u1ec7t.<\/p>\n<p>C\u00e1ch kh\u1eafc ph\u1ee5c l\u00e0 s\u1eed d\u1ee5ng let ho\u1eb7c const thay cho var trong v\u00f2ng l\u1eb7p (t\u1eeb ES6 tr\u1edf \u0111i). let v\u00e0 const c\u00f3 ph\u1ea1m vi kh\u1ed1i (block scope), t\u1ea1o ra m\u1ed9t bi\u1ebfn i m\u1edbi cho m\u1ed7i l\u1ea7n l\u1eb7p. Nh\u1edd \u0111\u00f3, m\u1ed7i Closure s\u1ebd ghi nh\u1edb gi\u00e1 tr\u1ecb i \u0111\u00fang c\u1ee7a l\u1ea7n l\u1eb7p m\u00e0 n\u00f3 \u0111\u01b0\u1ee3c t\u1ea1o ra.<\/p>\n<p>InterData \u0111\u00e3 c\u00f9ng b\u1ea1n t\u00ecm hi\u1ec3u t\u1ea7m quan tr\u1ecdng c\u1ee7a closures v\u00e0 nh\u1ea5n m\u1ea1nh vai tr\u00f2 c\u1ee7a ch\u00fang. Closures gi\u00fap l\u1eadp tr\u00ecnh vi\u00ean x\u00e2y d\u1ef1ng m\u00e3 ngu\u1ed3n linh ho\u1ea1t, d\u1ec5 t\u00e1i s\u1eed d\u1ee5ng v\u00e0 \u0111\u1ea3m b\u1ea3o t\u00ednh ri\u00eang t\u01b0 cho d\u1eef li\u1ec7u, t\u1eeb \u0111\u00f3 n\u00e2ng cao kh\u1ea3 n\u0103ng t\u1ed5 ch\u1ee9c v\u00e0 hi\u1ec7u qu\u1ea3 c\u1ee7a m\u00e3 ngu\u1ed3n.<\/p>\n<p>B\u1ea1n \u0111ang d\u00e0nh t\u00e2m huy\u1ebft h\u1ecdc v\u00e0 \u00e1p d\u1ee5ng Closure \u0111\u1ec3 x\u00e2y d\u1ef1ng nh\u1eefng t\u00ednh n\u0103ng m\u1ea1nh m\u1ebd, t\u1ed1i \u01b0u hi\u1ec7u su\u1ea5t cho d\u1ef1 \u00e1n JavaScript c\u1ee7a m\u00ecnh. \u0110\u1ec3 nh\u1eefng &#8220;\u0111\u1ee9a con tinh th\u1ea7n&#8221; n\u00e0y ho\u1ea1t \u0111\u1ed9ng online m\u1ed9t c\u00e1ch m\u01b0\u1ee3t m\u00e0, \u1ed5n \u0111\u1ecbnh v\u00e0 ti\u1ebfp c\u1eadn \u0111\u01b0\u1ee3c ng\u01b0\u1eddi d\u00f9ng, b\u1ea1n c\u1ea7n m\u1ed9t n\u1ec1n t\u1ea3ng h\u1ea1 t\u1ea7ng \u0111\u00e1ng tin c\u1eady. InterData cung c\u1ea5p d\u1ecbch v\u1ee5 <a href=\"https:\/\/interdata.vn\/thue-vps\/\">thu\u00ea VPS<\/a>\u00a0v\u1edbi ph\u1ea7n c\u1ee9ng th\u1ebf h\u1ec7 m\u1edbi nh\u01b0 CPU AMD EPYC\/Intel Xeon Platinum v\u00e0 SSD NVMe U.2, \u0111\u1ea3m b\u1ea3o hi\u1ec7u n\u0103ng v\u01b0\u1ee3t tr\u1ed9i cho website v\u00e0 \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n.<\/p>\n<p>N\u1ebfu d\u1ef1 \u00e1n c\u1ee7a b\u1ea1n l\u00e0 c\u00e1c \u1ee9ng d\u1ee5ng Node.js Backend, API, ho\u1eb7c c\u1ea7n m\u00f4i tr\u01b0\u1eddng linh ho\u1ea1t, c\u1ea5u h\u00ecnh m\u1ea1nh m\u1ebd h\u01a1n, h\u00e3y c\u00e2n nh\u1eafc thu\u00ea <a href=\"https:\/\/interdata.vn\/vps-linux\">VPS Linux<\/a> t\u1ea1i InterData. Li\u00ean h\u1ec7 InterData ngay \u0111\u1ec3 \u0111\u01b0\u1ee3c t\u01b0 v\u1ea5n chi ti\u1ebft v\u1ec1 d\u1ecbch v\u1ee5!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tr\u00ean h\u00e0nh tr\u00ecnh chinh ph\u1ee5c JavaScript, c\u00f3 m\u1ed9t kh\u00e1i ni\u1ec7m n\u1ec1n t\u1ea3ng c\u1ef1c k\u1ef3 m\u1ea1nh m\u1ebd nh\u01b0ng th\u01b0\u1eddng khi\u1ebfn kh\u00f4ng \u00edt l\u1eadp tr\u00ecnh vi\u00ean c\u1ea3m th\u1ea5y b\u1ed1i r\u1ed1i: \u0111\u00f3 ch\u00ednh l\u00e0 Closure. Hi\u1ec3u r\u00f5 Closure l\u00e0 g\u00ec kh\u00f4ng ch\u1ec9 gi\u00fap b\u1ea1n vi\u1ebft code hi\u1ec7u qu\u1ea3 h\u01a1n m\u00e0 c\u00f2n m\u1edf ra c\u00e1nh c\u1eeda \u0111\u1ec3 l\u00e0m vi\u1ec7c<\/p>\n","protected":false},"author":11,"featured_media":28335,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[140],"tags":[],"class_list":["post-28331","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lap-trinh"],"_links":{"self":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/28331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/comments?post=28331"}],"version-history":[{"count":8,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/28331\/revisions"}],"predecessor-version":[{"id":30740,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/posts\/28331\/revisions\/30740"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media\/28335"}],"wp:attachment":[{"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/media?parent=28331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/categories?post=28331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/interdata.vn\/blog\/wp-json\/wp\/v2\/tags?post=28331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}