[{"data":1,"prerenderedAt":1054},["ShallowReactive",2],{"blog-closures-javascript":3},{"id":4,"title":5,"author":6,"body":7,"date":1039,"description":1040,"extension":1041,"faq":1042,"image":1043,"meta":1044,"navigation":97,"path":1045,"seo":1046,"stem":1047,"tags":1048,"updated":1042,"__hash__":1053},"blog\u002Fblog\u002Fclosures-javascript.md","Closure no JavaScript: explicação simplificada","Larissa Santos",{"type":8,"value":9,"toc":1013},"minimark",[10,14,22,25,30,33,39,44,204,207,229,231,239,249,262,279,286,288,295,311,313,320,323,332,335,351,354,380,383,392,394,398,402,405,448,452,488,492,528,530,534,539,542,559,562,564,568,572,642,648,652,697,700,702,706,712,777,780,795,804,806,810,830,835,837,841,848,851,954,963,965,969,983,985,989,992,995,1009],[11,12,13],"p",{},"Imagine uma função que \"lembra\" de uma variável mesmo depois de ter encerrado. Parece estranho, mas é exatamente isso que closure faz, e provavelmente você já usou sem perceber.",[11,15,16,17,21],{},"Neste post, vamos entender ",[18,19,20],"strong",{},"passo a passo",", respondendo exatamente as dúvidas mais comuns que surgem ao ver esse código pela primeira vez.",[23,24],"hr",{},[26,27,29],"h2",{"id":28},"o-que-é-closure","O que é closure?",[11,31,32],{},"Closure é quando uma função \"lembra\" do ambiente onde foi criada, mesmo depois que esse ambiente já deveria ter acabado.\nEm JavaScript, funções não carregam só o código. Elas também carregam as variáveis que estavam ao redor delas no momento da criação.",[34,35,36],"blockquote",{},[11,37,38],{},"Closure é uma função que consegue acessar variáveis do escopo externo mesmo depois que esse escopo já foi encerrado.",[40,41,43],"h3",{"id":42},"exemplo-base","Exemplo base",[45,46,51],"pre",{"className":47,"code":48,"language":49,"meta":50,"style":50},"language-js shiki shiki-themes material-theme-lighter github-dark github-dark","function criarContador() {\n  let count = 0\n\n  return function () {\n    count++\n    return count\n  }\n}\n\nconst contador = criarContador()\n\ncontador() \u002F\u002F 1\ncontador() \u002F\u002F 2\ncontador() \u002F\u002F 3\n","js","",[52,53,54,74,92,99,114,123,132,138,144,149,166,171,184,194],"code",{"__ignoreMap":50},[55,56,59,63,67,71],"span",{"class":57,"line":58},"line",1,[55,60,62],{"class":61},"sFsEu","function",[55,64,66],{"class":65},"sK_r7"," criarContador",[55,68,70],{"class":69},"sG-J9","()",[55,72,73],{"class":69}," {\n",[55,75,77,80,84,88],{"class":57,"line":76},2,[55,78,79],{"class":61},"  let",[55,81,83],{"class":82},"sMo7A"," count",[55,85,87],{"class":86},"sFfmW"," =",[55,89,91],{"class":90},"s_k96"," 0\n",[55,93,95],{"class":57,"line":94},3,[55,96,98],{"emptyLinePlaceholder":97},true,"\n",[55,100,102,106,109,112],{"class":57,"line":101},4,[55,103,105],{"class":104},"s3Er8","  return",[55,107,108],{"class":61}," function",[55,110,111],{"class":69}," ()",[55,113,73],{"class":69},[55,115,117,120],{"class":57,"line":116},5,[55,118,119],{"class":82},"    count",[55,121,122],{"class":86},"++\n",[55,124,126,129],{"class":57,"line":125},6,[55,127,128],{"class":104},"    return",[55,130,131],{"class":82}," count\n",[55,133,135],{"class":57,"line":134},7,[55,136,137],{"class":69},"  }\n",[55,139,141],{"class":57,"line":140},8,[55,142,143],{"class":69},"}\n",[55,145,147],{"class":57,"line":146},9,[55,148,98],{"emptyLinePlaceholder":97},[55,150,152,155,159,161,163],{"class":57,"line":151},10,[55,153,154],{"class":61},"const",[55,156,158],{"class":157},"sVPC0"," contador",[55,160,87],{"class":86},[55,162,66],{"class":65},[55,164,165],{"class":82},"()\n",[55,167,169],{"class":57,"line":168},11,[55,170,98],{"emptyLinePlaceholder":97},[55,172,174,177,180],{"class":57,"line":173},12,[55,175,176],{"class":65},"contador",[55,178,179],{"class":82},"() ",[55,181,183],{"class":182},"sutJx","\u002F\u002F 1\n",[55,185,187,189,191],{"class":57,"line":186},13,[55,188,176],{"class":65},[55,190,179],{"class":82},[55,192,193],{"class":182},"\u002F\u002F 2\n",[55,195,197,199,201],{"class":57,"line":196},14,[55,198,176],{"class":65},[55,200,179],{"class":82},[55,202,203],{"class":182},"\u002F\u002F 3\n",[11,205,206],{},"O que está acontecendo aqui:",[208,209,210,217,222],"ul",{},[211,212,213,216],"li",{},[52,214,215],{},"criarContador()"," retorna uma função",[211,218,219,220],{},"essa função é armazenada na variável ",[52,221,176],{},[211,223,224,225,228],{},"quando você chama ",[52,226,227],{},"contador()",", está executando essa função retornada",[23,230],{},[26,232,234,235,238],{"id":233},"por-que-o-count-não-reinicia","Por que o ",[52,236,237],{},"count"," não reinicia?",[11,240,241,242,244,245,248],{},"Parece que ",[52,243,237],{}," deveria voltar para ",[52,246,247],{},"0"," a cada chamada, mas não volta.",[11,250,251,254,255,257,258,261],{},[18,252,253],{},"Resposta direta:"," porque ",[52,256,215],{}," foi executada apenas ",[18,259,260],{},"uma vez",".",[45,263,265],{"className":47,"code":264,"language":49,"meta":50,"style":50},"const contador = criarContador()\n",[52,266,267],{"__ignoreMap":50},[55,268,269,271,273,275,277],{"class":57,"line":58},[55,270,154],{"class":61},[55,272,158],{"class":157},[55,274,87],{"class":86},[55,276,66],{"class":65},[55,278,165],{"class":82},[11,280,281,282,285],{},"Depois disso, você não chama mais ",[52,283,284],{},"criarContador",", apenas a função retornada.",[23,287],{},[26,289,291,292,294],{"id":290},"então-onde-o-count-fica-armazenado","Então onde o ",[52,293,237],{}," fica armazenado?",[11,296,297,298,300,301,303,304,307,308,261],{},"Mesmo depois da execução de ",[52,299,284],{}," terminar, o ",[52,302,237],{}," continua existindo.\nIsso acontece porque a função retornada ",[18,305,306],{},"mantém acesso ao escopo onde foi criada.","\nEsse comportamento é o que chamamos de ",[18,309,310],{},"closure",[23,312],{},[26,314,316,317,319],{"id":315},"dúvida-comum-mas-count-não-deveria-ser-global","Dúvida comum: mas ",[52,318,237],{}," não deveria ser global?",[11,321,322],{},"Não, e aqui está o ponto mais importante.",[11,324,325,326,328,329,261],{},"O ",[52,327,237],{}," não é global. Ele fica em um ",[18,330,331],{},"ambiente em memória criado quando a função roda",[11,333,334],{},"Quando você executa:",[45,336,337],{"className":47,"code":264,"language":49,"meta":50,"style":50},[52,338,339],{"__ignoreMap":50},[55,340,341,343,345,347,349],{"class":57,"line":58},[55,342,154],{"class":61},[55,344,158],{"class":157},[55,346,87],{"class":86},[55,348,66],{"class":65},[55,350,165],{"class":82},[11,352,353],{},"O JavaScript cria um \"ambiente\" na memória:",[45,355,359],{"className":356,"code":357,"language":358,"meta":50,"style":50},"language-txt shiki shiki-themes material-theme-lighter github-dark github-dark","Ambiente da função criarContador:\n{\n  count: 0\n}\n","txt",[52,360,361,366,371,376],{"__ignoreMap":50},[55,362,363],{"class":57,"line":58},[55,364,365],{},"Ambiente da função criarContador:\n",[55,367,368],{"class":57,"line":76},[55,369,370],{},"{\n",[55,372,373],{"class":57,"line":94},[55,374,375],{},"  count: 0\n",[55,377,378],{"class":57,"line":101},[55,379,143],{},[11,381,382],{},"E a função retornada fica ligada a esse ambiente:",[45,384,386],{"className":356,"code":385,"language":358,"meta":50,"style":50},"contador → função que acessa { count }\n",[52,387,388],{"__ignoreMap":50},[55,389,390],{"class":57,"line":58},[55,391,385],{},[23,393],{},[26,395,397],{"id":396},"o-que-acontece-em-cada-chamada","O que acontece em cada chamada",[40,399,401],{"id":400},"primeira-chamada","Primeira chamada",[11,403,404],{},"Atualiza o ambiente:",[45,406,408],{"className":47,"code":407,"language":49,"meta":50,"style":50},"contador()\n{ count: 0 } → { count: 1 }\n",[52,409,410,416],{"__ignoreMap":50},[55,411,412,414],{"class":57,"line":58},[55,413,176],{"class":65},[55,415,165],{"class":82},[55,417,418,421,424,427,430,433,436,438,440,442,445],{"class":57,"line":76},[55,419,420],{"class":69},"{",[55,422,83],{"class":423},"soiBB",[55,425,426],{"class":69},":",[55,428,429],{"class":90}," 0",[55,431,432],{"class":69}," }",[55,434,435],{"class":82}," → ",[55,437,420],{"class":69},[55,439,83],{"class":423},[55,441,426],{"class":69},[55,443,444],{"class":90}," 1",[55,446,447],{"class":69}," }\n",[40,449,451],{"id":450},"segunda-chamada","Segunda chamada",[45,453,455],{"className":47,"code":454,"language":49,"meta":50,"style":50},"contador()\n{ count: 1 } → { count: 2 }\n",[52,456,457,463],{"__ignoreMap":50},[55,458,459,461],{"class":57,"line":58},[55,460,176],{"class":65},[55,462,165],{"class":82},[55,464,465,467,469,471,473,475,477,479,481,483,486],{"class":57,"line":76},[55,466,420],{"class":69},[55,468,83],{"class":423},[55,470,426],{"class":69},[55,472,444],{"class":90},[55,474,432],{"class":69},[55,476,435],{"class":82},[55,478,420],{"class":69},[55,480,83],{"class":423},[55,482,426],{"class":69},[55,484,485],{"class":90}," 2",[55,487,447],{"class":69},[40,489,491],{"id":490},"terceira-chamada","Terceira chamada",[45,493,495],{"className":47,"code":494,"language":49,"meta":50,"style":50},"contador()\n{ count: 2 } → { count: 3 }\n",[52,496,497,503],{"__ignoreMap":50},[55,498,499,501],{"class":57,"line":58},[55,500,176],{"class":65},[55,502,165],{"class":82},[55,504,505,507,509,511,513,515,517,519,521,523,526],{"class":57,"line":76},[55,506,420],{"class":69},[55,508,83],{"class":423},[55,510,426],{"class":69},[55,512,485],{"class":90},[55,514,432],{"class":69},[55,516,435],{"class":82},[55,518,420],{"class":69},[55,520,83],{"class":423},[55,522,426],{"class":69},[55,524,525],{"class":90}," 3",[55,527,447],{"class":69},[23,529],{},[26,531,533],{"id":532},"por-que-isso-funciona","Por que isso funciona?",[34,535,536],{},[11,537,538],{},"Enquanto existir uma função usando esse ambiente, o JavaScript mantém ele na memória.",[11,540,541],{},"Ou seja:",[208,543,544,550,553],{},[211,545,546,547,549],{},"o ",[52,548,237],{}," não é global",[211,551,552],{},"não é recriado a cada chamada",[211,554,555,556],{},"ele é ",[18,557,558],{},"preservado porque ainda está sendo usado",[11,560,561],{},"Esse é o ponto central de closure.",[23,563],{},[26,565,567],{"id":566},"comparação-com-e-sem-closure","Comparação: com e sem closure",[40,569,571],{"id":570},"sem-persistência","Sem persistência",[45,573,575],{"className":47,"code":574,"language":49,"meta":50,"style":50},"function contador() {\n  let count = 0\n  count++\n  return count\n}\n\ncontador() \u002F\u002F 1\ncontador() \u002F\u002F 1\ncontador() \u002F\u002F 1\n",[52,576,577,587,597,604,610,614,618,626,634],{"__ignoreMap":50},[55,578,579,581,583,585],{"class":57,"line":58},[55,580,62],{"class":61},[55,582,158],{"class":65},[55,584,70],{"class":69},[55,586,73],{"class":69},[55,588,589,591,593,595],{"class":57,"line":76},[55,590,79],{"class":61},[55,592,83],{"class":82},[55,594,87],{"class":86},[55,596,91],{"class":90},[55,598,599,602],{"class":57,"line":94},[55,600,601],{"class":82},"  count",[55,603,122],{"class":86},[55,605,606,608],{"class":57,"line":101},[55,607,105],{"class":104},[55,609,131],{"class":82},[55,611,612],{"class":57,"line":116},[55,613,143],{"class":69},[55,615,616],{"class":57,"line":125},[55,617,98],{"emptyLinePlaceholder":97},[55,619,620,622,624],{"class":57,"line":134},[55,621,176],{"class":65},[55,623,179],{"class":82},[55,625,183],{"class":182},[55,627,628,630,632],{"class":57,"line":140},[55,629,176],{"class":65},[55,631,179],{"class":82},[55,633,183],{"class":182},[55,635,636,638,640],{"class":57,"line":146},[55,637,176],{"class":65},[55,639,179],{"class":82},[55,641,183],{"class":182},[11,643,644,645,647],{},"Aqui o ",[52,646,237],{}," é recriado toda vez que a função é chamada.",[40,649,651],{"id":650},"com-closure","Com closure",[45,653,655],{"className":47,"code":654,"language":49,"meta":50,"style":50},"const contador = criarContador()\n\ncontador() \u002F\u002F 1\ncontador() \u002F\u002F 2\ncontador() \u002F\u002F 3\n",[52,656,657,669,673,681,689],{"__ignoreMap":50},[55,658,659,661,663,665,667],{"class":57,"line":58},[55,660,154],{"class":61},[55,662,158],{"class":157},[55,664,87],{"class":86},[55,666,66],{"class":65},[55,668,165],{"class":82},[55,670,671],{"class":57,"line":76},[55,672,98],{"emptyLinePlaceholder":97},[55,674,675,677,679],{"class":57,"line":94},[55,676,176],{"class":65},[55,678,179],{"class":82},[55,680,183],{"class":182},[55,682,683,685,687],{"class":57,"line":101},[55,684,176],{"class":65},[55,686,179],{"class":82},[55,688,193],{"class":182},[55,690,691,693,695],{"class":57,"line":116},[55,692,176],{"class":65},[55,694,179],{"class":82},[55,696,203],{"class":182},[11,698,699],{},"O valor é mantido entre chamadas porque o ambiente persiste.",[23,701],{},[26,703,705],{"id":704},"múltiplos-estados-independentes","Múltiplos estados independentes",[11,707,708,709,711],{},"Cada chamada a ",[52,710,284],{}," cria um ambiente isolado:",[45,713,715],{"className":47,"code":714,"language":49,"meta":50,"style":50},"const c1 = criarContador()\nconst c2 = criarContador()\n\nc1() \u002F\u002F 1\nc1() \u002F\u002F 2\n\nc2() \u002F\u002F 1\n",[52,716,717,730,743,747,756,764,768],{"__ignoreMap":50},[55,718,719,721,724,726,728],{"class":57,"line":58},[55,720,154],{"class":61},[55,722,723],{"class":157}," c1",[55,725,87],{"class":86},[55,727,66],{"class":65},[55,729,165],{"class":82},[55,731,732,734,737,739,741],{"class":57,"line":76},[55,733,154],{"class":61},[55,735,736],{"class":157}," c2",[55,738,87],{"class":86},[55,740,66],{"class":65},[55,742,165],{"class":82},[55,744,745],{"class":57,"line":94},[55,746,98],{"emptyLinePlaceholder":97},[55,748,749,752,754],{"class":57,"line":101},[55,750,751],{"class":65},"c1",[55,753,179],{"class":82},[55,755,183],{"class":182},[55,757,758,760,762],{"class":57,"line":116},[55,759,751],{"class":65},[55,761,179],{"class":82},[55,763,193],{"class":182},[55,765,766],{"class":57,"line":125},[55,767,98],{"emptyLinePlaceholder":97},[55,769,770,773,775],{"class":57,"line":134},[55,771,772],{"class":65},"c2",[55,774,179],{"class":82},[55,776,183],{"class":182},[11,778,779],{},"Visualizando:",[45,781,783],{"className":356,"code":782,"language":358,"meta":50,"style":50},"c1 → { count: 2 }\nc2 → { count: 1 }\n",[52,784,785,790],{"__ignoreMap":50},[55,786,787],{"class":57,"line":58},[55,788,789],{},"c1 → { count: 2 }\n",[55,791,792],{"class":57,"line":76},[55,793,794],{},"c2 → { count: 1 }\n",[11,796,797,798,800,801,803],{},"Isso significa que ",[52,799,751],{}," e ",[52,802,772],{}," são completamente independentes.",[23,805],{},[26,807,809],{"id":808},"o-que-closure-permite","O que closure permite",[208,811,812,818,824],{},[211,813,814,817],{},[18,815,816],{},"Estado persistente"," entre chamadas",[211,819,820,823],{},[18,821,822],{},"Encapsulamento"," de dados, sem expô-los globalmente",[211,825,826,829],{},[18,827,828],{},"Isolamento"," entre instâncias diferentes",[34,831,832],{},[11,833,834],{},"Variáveis só são recriadas quando a função que as define é executada novamente.",[23,836],{},[26,838,840],{"id":839},"conexão-com-o-mundo-real","Conexão com o mundo real",[11,842,843,844,847],{},"Esse padrão é a base de várias coisas que você já usa no dia a dia. O ",[52,845,846],{},"state"," em frameworks como Vue e React, por exemplo, funciona com o mesmo princípio.",[11,849,850],{},"Veja como isso se parece em um gerenciamento de estado simples:",[45,852,854],{"className":47,"code":853,"language":49,"meta":50,"style":50},"function createStore() {\n  let state = { count: 0 }\n\n  return {\n    increment() {\n      state.count++\n    },\n    getState() {\n      return state\n    }\n  }\n}\n",[52,855,856,867,888,892,898,908,919,924,933,941,946,950],{"__ignoreMap":50},[55,857,858,860,863,865],{"class":57,"line":58},[55,859,62],{"class":61},[55,861,862],{"class":65}," createStore",[55,864,70],{"class":69},[55,866,73],{"class":69},[55,868,869,871,874,876,879,882,884,886],{"class":57,"line":76},[55,870,79],{"class":61},[55,872,873],{"class":82}," state",[55,875,87],{"class":86},[55,877,878],{"class":69}," {",[55,880,83],{"class":881},"sdv8B",[55,883,426],{"class":69},[55,885,429],{"class":90},[55,887,447],{"class":69},[55,889,890],{"class":57,"line":94},[55,891,98],{"emptyLinePlaceholder":97},[55,893,894,896],{"class":57,"line":101},[55,895,105],{"class":104},[55,897,73],{"class":69},[55,899,900,904,906],{"class":57,"line":116},[55,901,903],{"class":902},"s0u7J","    increment",[55,905,70],{"class":69},[55,907,73],{"class":69},[55,909,910,913,915,917],{"class":57,"line":125},[55,911,912],{"class":82},"      state",[55,914,261],{"class":69},[55,916,237],{"class":82},[55,918,122],{"class":86},[55,920,921],{"class":57,"line":134},[55,922,923],{"class":69},"    },\n",[55,925,926,929,931],{"class":57,"line":140},[55,927,928],{"class":902},"    getState",[55,930,70],{"class":69},[55,932,73],{"class":69},[55,934,935,938],{"class":57,"line":146},[55,936,937],{"class":104},"      return",[55,939,940],{"class":82}," state\n",[55,942,943],{"class":57,"line":151},[55,944,945],{"class":69},"    }\n",[55,947,948],{"class":57,"line":168},[55,949,137],{"class":69},[55,951,952],{"class":57,"line":173},[55,953,143],{"class":69},[11,955,325,956,958,959,962],{},[52,957,846],{}," fica protegido dentro do ambiente de ",[52,960,961],{},"createStore",", acessível apenas pelas funções retornadas. Isso já é encapsulamento real, sem nenhuma biblioteca.",[23,964],{},[26,966,968],{"id":967},"resumo","Resumo",[208,970,971,974,977,980],{},[211,972,973],{},"Closure acontece quando uma função mantém acesso ao seu escopo externo após a execução",[211,975,976],{},"Esse acesso mantém variáveis vivas na memória",[211,978,979],{},"Isso permite criar estados persistentes sem usar variáveis globais",[211,981,982],{},"Cada instância criada tem seu próprio ambiente isolado",[23,984],{},[26,986,988],{"id":987},"conclusão","Conclusão",[11,990,991],{},"Closure não é um recurso avançado reservado para casos especiais. É simplesmente como o JavaScript lida com funções, escopo e memória.",[11,993,994],{},"Entender isso muda a forma como você escreve código com:",[208,996,997,1000,1003,1006],{},[211,998,999],{},"estado",[211,1001,1002],{},"funções assíncronas",[211,1004,1005],{},"hooks e composables",[211,1007,1008],{},"arquitetura de aplicações",[1010,1011,1012],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sFsEu, html code.shiki .sFsEu{--shiki-light:#9C3EDA;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .sK_r7, html code.shiki .sK_r7{--shiki-light:#6182B8;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sG-J9, html code.shiki .sG-J9{--shiki-light:#39ADB5;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sMo7A, html code.shiki .sMo7A{--shiki-light:#90A4AE;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .sFfmW, html code.shiki .sFfmW{--shiki-light:#39ADB5;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .s_k96, html code.shiki .s_k96{--shiki-light:#F76D47;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .s3Er8, html code.shiki .s3Er8{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#F97583;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sVPC0, html code.shiki .sVPC0{--shiki-light:#90A4AE;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .soiBB, html code.shiki .soiBB{--shiki-light:#E2931D;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sdv8B, html code.shiki .sdv8B{--shiki-light:#E53935;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .s0u7J, html code.shiki .s0u7J{--shiki-light:#E53935;--shiki-default:#B392F0;--shiki-dark:#B392F0}",{"title":50,"searchDepth":76,"depth":76,"links":1014},[1015,1018,1020,1022,1024,1029,1030,1034,1035,1036,1037,1038],{"id":28,"depth":76,"text":29,"children":1016},[1017],{"id":42,"depth":94,"text":43},{"id":233,"depth":76,"text":1019},"Por que o count não reinicia?",{"id":290,"depth":76,"text":1021},"Então onde o count fica armazenado?",{"id":315,"depth":76,"text":1023},"Dúvida comum: mas count não deveria ser global?",{"id":396,"depth":76,"text":397,"children":1025},[1026,1027,1028],{"id":400,"depth":94,"text":401},{"id":450,"depth":94,"text":451},{"id":490,"depth":94,"text":491},{"id":532,"depth":76,"text":533},{"id":566,"depth":76,"text":567,"children":1031},[1032,1033],{"id":570,"depth":94,"text":571},{"id":650,"depth":94,"text":651},{"id":704,"depth":76,"text":705},{"id":808,"depth":76,"text":809},{"id":839,"depth":76,"text":840},{"id":967,"depth":76,"text":968},{"id":987,"depth":76,"text":988},"2026-03-21T15:32:00-03:00","Entenda um dos conceitos mais importantes do JavaScript, e também um dos mais confusos à primeira vista.","md",null,"\u002Fimages\u002Fblog\u002Fentendendo-closures.png",{},"\u002Fblog\u002Fclosures-javascript",{"title":5,"description":1040},"blog\u002Fclosures-javascript",[310,1049,1050,1051,1052],"JavaScript","Clean Code","arquitetura","desenvolvimento","Rp4qczdAa3USvuGHaJWCxKVz2gVmQPyLGHfAdbFoPaI",1783037053111]