<snapdata remixID="13541675"><project name="closures" app="Snap! 10.6.0, https://snap.berkeley.edu" version="2"><notes></notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAAAXNSR0IArs4c6QAAAidJREFUeF7t0sEJADAMA7Hmm/33baFL3EdewHBodvceUyAqMABG5d3+AgCCkBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL9zABlICwCY5ncOIANpAQDT/M4BZCAtAGCa3zmADKQFAEzzOweQgbQAgGl+5wAykBYAMM3vHEAG0gIApvmdA8hAWgDANL/zB3sohhFbXY8gAAAAAElFTkSuQmCC</thumbnail><scenes select="1"><scene name="closures"><notes></notes><palette><category name="Objects" color="255,54,23,1"/><category name="Blocks / Scripts" color="69,101,172,1"/><category name="console" color="90,0,212,1"/></palette><hidden></hidden><headers></headers><code></code><blocks><block-definition s="null" type="reporter" category="Objects"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>var_get(name)</l><list><l>null</l></list></block></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos;" type="command" category="other"><header></header><code></code><translations></translations><inputs><input type="%upvar" initial="1"></input><input type="%s" initial="1"></input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition><block-definition s="%&apos;script&apos; ( %&apos;parms&apos; )" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%mult%s"></input></inputs><script><block s="doDeclareVariables"><list><l>blocks</l></list></block><block s="doSetVar"><l>blocks</l><block s="reportTextSplit"><block var="script"/><l><option>blocks</option></l></block></block><block s="doSetVar"><l>blocks</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="blocks"/></block><l><option>list</option></l></block><block var="blocks"/><block s="reportNewList"><list><block var="blocks"/></list></block></block></block><block s="doForEach"><l>item</l><block var="parms"/><script><block s="doAddToList"><block var="item"/><block s="reportListItem"><l>1</l><block var="blocks"/></block></block></script></block><block s="doReport"><block s="reportJoinWords"><block var="blocks"/></block></block></script></block-definition><block-definition s="undefined" type="reporter" category="Objects"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doReport"><block s="reportApplyExtension"><l>var_get(name)</l><list><l>undefined</l></list></block></block></script><scripts><script x="130.9090909090909" y="88.43636363636391"><block s="doReport"><block var="undefined"/></block></script></scripts></block-definition><block-definition s="%&apos;object&apos; . %&apos;property&apos;" type="reporter" category="Objects" space="true"><header></header><code></code><translations></translations><inputs><input type="%obj" initial="1"></input><input type="%s" initial="1"></input></inputs><script><custom-block s="let %upvar be %s"><l>index</l><block s="reportListIndex"><block var="property"/><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><block var="object"/></block></block></block></custom-block><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><block var="index"/><l>0</l></list></block><script><block s="doReport"><block s="reportListItem"><l>2</l><block s="reportListItem"><block var="index"/><block var="object"/></block></block></block></script><script><block s="doReport"><custom-block s="undefined"></custom-block></block></script></block></script></block-definition><block-definition s="%&apos;object&apos; . %&apos;property&apos; = %&apos;value&apos;" type="command" category="Objects"><header></header><code></code><translations></translations><inputs><input type="%obj" initial="1"></input><input type="%s" initial="1"></input><input type="%s" initial="1"></input></inputs><script><custom-block s="let %upvar be %s"><l>index</l><block s="reportListIndex"><block var="property"/><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><block var="object"/></block></block></block></custom-block><block s="doIfElse"><block s="reportVariadicGreaterThan"><list><block var="index"/><l>0</l></list></block><script><block s="doReplaceInList"><l>2</l><block s="reportListItem"><block var="index"/><block var="object"/></block><block var="value"/></block></script><script><block s="doAddToList"><block s="reportNewList"><list><block var="property"/><block var="value"/></list></block><block var="object"/></block></script></block></script></block-definition><block-definition s="%&apos;object&apos; has %&apos;property&apos;" type="predicate" category="Objects"><header></header><code></code><translations></translations><inputs><input type="%obj" initial="1"></input><input type="%s" initial="1"></input></inputs><script><block s="doReport"><block s="reportVariadicGreaterThan"><list><block s="reportListIndex"><block var="property"/><block s="reportListItem"><l>1</l><block s="reportListAttribute"><l><option>columns</option></l><block var="object"/></block></block></block><l>0</l></list></block></block></script></block-definition><block-definition s="exec %&apos;script&apos;" type="command" category="control"><header></header><code></code><translations></translations><inputs><input type="%cs" initial="1"></input></inputs><script><block s="doRun"><custom-block s="%cmdRing ( %mult%s )"><block var="script"/><list><l>running context</l></list></custom-block><list><block s="reportNewList"><list><block s="reportNewList"><list><l>outer context</l><custom-block s="null"></custom-block></list></block><block s="reportNewList"><list><l>bindings</l><block s="reportNewList"><list></list></block></list></block></list></block></list></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos; $nl" type="command" category="Objects" space="true"><header></header><code></code><translations></translations><inputs><input type="%upvar" initial="1"></input><input type="%s" initial="1"></input></inputs><script><custom-block s="let %upvar be %s"><l>running context</l><block s="reportAttributeOf"><l>running context</l><block s="reportEnvironment"><l><option>caller</option></l></block></block></custom-block><custom-block s="%obj . %s = %s"><custom-block s="%obj . %s"><block var="running context"/><l>bindings</l></custom-block><block var="var"/><block var="val"/></custom-block></script></block-definition><block-definition s="join %&apos;cmd&apos; %&apos;inps&apos;" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%mult%s"></input></inputs><script><block s="doReport"><block s="reportJoinWords"><block s="reportCONS"><block var="cmd"/><block var="inps"/></block></block></block></script></block-definition><block-definition s="stack $nl %&apos;parts&apos;" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%mult%cmdRing"></input></inputs><script><block s="doReport"><block s="reportCombine"><block s="reportCONS"><block s="reifyScript"><script></script><list></list></block><block var="parts"/></block><block s="reifyReporter"><autolambda><block s="evaluate"><block s="reportJoinWords"><list><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reifyScript"><script></script><list></list></block></autolambda><list></list></block><block var="v"/></list></block><block var="a"/></list></block><list></list></block></autolambda><list><l>a</l><l>v</l></list></block></block></block></script></block-definition><block-definition s="%&apos;blocks&apos; blocks" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input></inputs><script><block s="doSetVar"><l>blocks</l><block s="reportTextSplit"><block var="blocks"/><l><option>blocks</option></l></block></block><block s="doReport"><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="blocks"/></block><l><option>list</option></l></block><block var="blocks"/><block s="reportNewList"><list><block var="blocks"/></list></block></block></block></script></block-definition><block-definition s="%&apos;blocks&apos; length" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input></inputs><script><block s="doSetVar"><l>blocks</l><block s="reportTextSplit"><block var="blocks"/><l><option>blocks</option></l></block></block><block s="doSetVar"><l>blocks</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="blocks"/></block><l><option>list</option></l></block><block var="blocks"/><block s="reportNewList"><list><block var="blocks"/></list></block></block></block><block s="doReport"><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block s="reportListItem"><l>1</l><block var="blocks"/></block></block><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block s="reportListItem"><l>1</l><block s="reportListItem"><l>1</l><block var="blocks"/></block></block><l><option>blocks</option></l></block></block></block></block></script></block-definition><block-definition s="%&apos;script&apos; parameters" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input></inputs><script><block s="doDeclareVariables"><list><l>blocks</l><l>first</l><l>length</l></list></block><block s="doSetVar"><l>blocks</l><block s="reportTextSplit"><block var="script"/><l><option>blocks</option></l></block></block><block s="doSetVar"><l>blocks</l><block s="reportIfElse"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="blocks"/></block><l><option>list</option></l></block><block var="blocks"/><block s="reportNewList"><list><block var="blocks"/></list></block></block></block><block s="doSetVar"><l>first</l><block s="reportListItem"><l>1</l><block var="blocks"/></block></block><block s="doSetVar"><l>length</l><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="first"/></block><block s="reportListAttribute"><l><option>length</option></l><block s="reportTextSplit"><block s="reportListItem"><l>1</l><block var="first"/></block><l><option>blocks</option></l></block></block></block></block><block s="doReport"><block s="reportIfElse"><block var="length"/><block s="reportListItem"><block s="reportNumbers"><block s="reportDifference"><block s="reportListAttribute"><l><option>length</option></l><block var="first"/></block><block s="reportDifference"><block var="length"/><l>1</l></block></block><block s="reportListAttribute"><l><option>length</option></l><block var="first"/></block></block><block var="first"/></block><block s="reportNewList"><list></list></block></block></block></script></block-definition><block-definition s="add parameters %&apos;parms&apos; to %&apos;blocks&apos;" type="command" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%mult%s"></input><input type="%l"></input></inputs><script><block s="doForEach"><l>p</l><block var="parms"/><script><block s="doAddToList"><block var="p"/><block s="reportListItem"><l>1</l><block var="blocks"/></block></block></script></block></script></block-definition><block-definition s="prepend %&apos;script&apos; to %&apos;orig&apos;" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%cmdRing"></input></inputs><script><block s="doReport"><custom-block s="%cmdRing ( %mult%s )"><block s="evaluate"><custom-block s="join %cmdRing %mult%s"><custom-block s="join %cmdRing %mult%s"><block s="reifyReporter"><autolambda><block s="reifyScript"><script></script><list></list></block></autolambda><list></list></block><list><block var="orig"/></list></custom-block><list><block var="script"/></list></custom-block><list></list></block><custom-block s="%cmdRing parameters"><block var="orig"/></custom-block></custom-block></block></script><scripts><script x="45.39999961853027" y="173.66666666666646"><block s="reportJoinWords"><list><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reifyScript"><script></script><list></list></block></autolambda><list></list></block><l></l></list></block><l></l></list></block></script></scripts></block-definition><block-definition s="append %&apos;script&apos; to %&apos;orig&apos;" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%cmdRing"></input><input type="%cmdRing"></input></inputs><script><block s="doReport"><custom-block s="%cmdRing ( %mult%s )"><block s="evaluate"><custom-block s="join %cmdRing %mult%s"><custom-block s="join %cmdRing %mult%s"><block s="reifyReporter"><autolambda><block s="reifyScript"><script></script><list></list></block></autolambda><list></list></block><list><block var="script"/></list></custom-block><list><block var="orig"/></list></custom-block><list></list></block><custom-block s="%cmdRing parameters"><block var="orig"/></custom-block></custom-block></block></script><scripts><script x="45.39999961853027" y="173.66666666666646"><block s="reportJoinWords"><list><block s="reportJoinWords"><list><block s="reifyReporter"><autolambda><block s="reifyScript"><script></script><list></list></block></autolambda><list></list></block><l></l></list></block><l></l></list></block></script></scripts></block-definition><block-definition s="%&apos;cmd&apos; bind %&apos;v&apos;" type="reporter" category="Blocks / Scripts"><header></header><code></code><translations></translations><inputs><input type="%anyUE"></input><input type="%mult%l"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="prepend %cmdRing to %cmdRing"><custom-block s="stack %br %mult%cmdRing"><block s="reportMap"><block s="reifyReporter"><autolambda><custom-block s="stack %br %mult%cmdRing"><list><custom-block s="join %cmdRing %mult%s"><block s="reifyScript"><script><block s="doDeclareVariables"><list><l> </l></list></block></script><list></list></block><list><block s="reportListItem"><l>1</l><l/></block></list></custom-block><custom-block s="join %cmdRing %mult%s"><block s="reifyScript"><script><block s="doSetVar"><l></l><l></l></block></script><list></list></block><list><block s="reportListItem"><l>1</l><l/></block><block s="reportListItem"><l>2</l><l/></block></list></custom-block></list></custom-block></autolambda><list></list></block><block var="v"/></block></custom-block><custom-block s="join %cmdRing %mult%s"><block s="reifyScript"><script><block s="doReport"><l></l></block></script><list></list></block><list><block s="reportApplyExtension"><l>var_get(name)</l><list><l>cmd</l></list></block></list></custom-block></custom-block><list></list></block></block></script><scripts><script x="356.10392400568185" y="249.27272727272725"><block var="cmd"/></script></scripts></block-definition><block-definition s="set %&apos;var&apos; to %&apos;val&apos; $nl" type="command" category="Objects"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1"><options>§_getVarNamesDict</options></input><input type="%s" initial="1"></input></inputs><script><custom-block s="let %upvar be %s"><l>current context</l><block s="reportAttributeOf"><l>running context</l><block s="reportEnvironment"><l><option>caller</option></l></block></block></custom-block><block s="doUntil"><block s="reportVariadicIsIdentical"><list><block var="current context"/><custom-block s="null"></custom-block></list></block><script><block s="doIfElse"><custom-block s="%obj has %s"><custom-block s="%obj . %s"><block var="current context"/><l>bindings</l></custom-block><block var="var"/></custom-block><script><custom-block s="%obj . %s = %s"><custom-block s="%obj . %s"><block var="current context"/><l>bindings</l></custom-block><block var="var"/><block var="val"/></custom-block><block s="doStopThis"><l><option>this block</option></l></block></script><script><block s="doSetVar"><l>current context</l><custom-block s="%obj . %s"><block var="current context"/><l>outer context</l></custom-block></block></script></block></script></block><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>Reference Error: </l><block var="var"/><l> is not defined.</l></list></block></list></block></script></block-definition><block-definition s="%&apos;var&apos;" type="reporter" category="Objects"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1"><options>§_getVarNamesDict</options></input></inputs><script><custom-block s="let %upvar be %s"><l>current context</l><block s="reportAttributeOf"><l>running context</l><block s="reportEnvironment"><l><option>caller</option></l></block></block></custom-block><block s="doUntil"><block s="reportVariadicIsIdentical"><list><block var="current context"/><custom-block s="null"></custom-block></list></block><script><block s="doIfElse"><custom-block s="%obj has %s"><custom-block s="%obj . %s"><block var="current context"/><l>bindings</l></custom-block><block var="var"/></custom-block><script><block s="doReport"><custom-block s="%obj . %s"><custom-block s="%obj . %s"><block var="current context"/><l>bindings</l></custom-block><block var="var"/></custom-block></block></script><script><block s="doSetVar"><l>current context</l><custom-block s="%obj . %s"><block var="current context"/><l>outer context</l></custom-block></block></script></block></script></block><block s="doApplyExtension"><l>err_error(msg)</l><list><block s="reportJoinWords"><list><l>Reference Error: </l><block var="var"/><l> is not defined.</l></list></block></list></block></script></block-definition><block-definition s="function %&apos;name&apos; ( %&apos;parameters&apos; ) %&apos;body&apos;" type="command" category="Objects" space="true"><header></header><code></code><translations></translations><inputs><input type="%upvar" initial="1"></input><input type="%mult%upvar">a&#xD;b&#xD;c&#xD;d&#xD;e&#xD;f&#xD;g&#xD;h&#xD;i&#xD;j&#xD;k&#xD;l&#xD;m&#xD;n&#xD;o&#xD;p&#xD;q&#xD;r&#xD;s&#xD;t&#xD;u&#xD;v&#xD;w&#xD;x&#xD;y&#xD;z</input><input type="%cs" irreplaceable="true" initial="1"></input></inputs><script><custom-block s="let %upvar be %s"><l>running context</l><block s="reportAttributeOf"><l>running context</l><block s="reportEnvironment"><l><option>caller</option></l></block></block></custom-block><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="parameters"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>parameters</l><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="body"/><l>0</l></list></block><script><block s="doSetVar"><l>body</l><block s="reifyScript"><script></script><list></list></block></block></script><list></list></block><custom-block s="let %upvar be %s"><l>function</l><block s="reportNewList"><list><block s="reportNewList"><list><l>parameters</l><block var="parameters"/></list></block><block s="reportNewList"><list><l>body</l><block var="body"/></list></block><block s="reportNewList"><list><l>outer context</l><block var="running context"/></list></block></list></block></custom-block><custom-block s="%obj . %s = %s"><custom-block s="%obj . %s"><block var="running context"/><l>bindings</l></custom-block><block var="name"/><block var="function"/></custom-block></script></block-definition><block-definition s="function %&apos;name&apos; ( %&apos;parameters&apos; ) %&apos;body&apos; $nl" type="reporter" category="Objects"><header></header><code></code><translations></translations><inputs><input type="%upvar" initial="1"></input><input type="%mult%upvar">a&#xD;b&#xD;c&#xD;d&#xD;e&#xD;f&#xD;g&#xD;h&#xD;i&#xD;j&#xD;k&#xD;l&#xD;m&#xD;n&#xD;o&#xD;p&#xD;q&#xD;r&#xD;s&#xD;t&#xD;u&#xD;v&#xD;w&#xD;x&#xD;y&#xD;z</input><input type="%cs" irreplaceable="true" initial="1"></input></inputs><script><custom-block s="let %upvar be %s"><l>running context</l><block s="reportAttributeOf"><l>running context</l><block s="reportEnvironment"><l><option>caller</option></l></block></block></custom-block><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="parameters"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>parameters</l><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="body"/><l>0</l></list></block><script><block s="doSetVar"><l>body</l><block s="reifyScript"><script></script><list></list></block></block></script><list></list></block><custom-block s="let %upvar be %s"><l>function</l><block s="reportNewList"><list><block s="reportNewList"><list><l>parameters</l><block var="parameters"/></list></block><block s="reportNewList"><list><l>body</l><block var="body"/></list></block><block s="reportNewList"><list><l>outer context</l><block var="running context"/></list></block></list></block></custom-block><custom-block s="%obj . %s = %s"><custom-block s="%obj . %s"><block var="running context"/><l>bindings</l></custom-block><block var="name"/><block var="function"/></custom-block><block s="doReport"><block var="function"/></block></script></block-definition><block-definition s="function ( %&apos;parameters&apos; ) %&apos;body&apos; $nl" type="reporter" category="Objects"><header></header><code></code><translations></translations><inputs><input type="%mult%upvar">a&#xD;b&#xD;c&#xD;d&#xD;e&#xD;f&#xD;g&#xD;h&#xD;i&#xD;j&#xD;k&#xD;l&#xD;m&#xD;n&#xD;o&#xD;p&#xD;q&#xD;r&#xD;s&#xD;t&#xD;u&#xD;v&#xD;w&#xD;x&#xD;y&#xD;z</input><input type="%cs" irreplaceable="true" initial="1"></input></inputs><script><custom-block s="let %upvar be %s"><l>running context</l><block s="reportAttributeOf"><l>running context</l><block s="reportEnvironment"><l><option>caller</option></l></block></block></custom-block><block s="doIf"><block s="reportIsA"><block s="reportListItem"><l>1</l><block var="parameters"/></block><l><option>list</option></l></block><script><block s="doSetVar"><l>parameters</l><block s="reportNewList"><list></list></block></block></script><list></list></block><block s="doIf"><block s="reportVariadicEquals"><list><block var="body"/><l>0</l></list></block><script><block s="doSetVar"><l>body</l><block s="reifyScript"><script></script><list></list></block></block></script><list></list></block><custom-block s="let %upvar be %s"><l>function</l><block s="reportNewList"><list><block s="reportNewList"><list><l>parameters</l><block var="parameters"/></list></block><block s="reportNewList"><list><l>body</l><block var="body"/></list></block><block s="reportNewList"><list><l>outer context</l><block var="running context"/></list></block></list></block></custom-block><block s="doReport"><block var="function"/></block></script></block-definition><block-definition s="%&apos;function&apos; ( %&apos;arguments&apos; )" type="command" category="Objects" space="true"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1"><options>§_getVarNamesDict</options></input><input type="%mult%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="function"/><l><option>list</option></l></block></block><script><custom-block s="let %upvar be %s"><l>running context</l><block s="reportAttributeOf"><l>running context</l><block s="reportEnvironment"><l><option>caller</option></l></block></block></custom-block><block s="doSetVar"><l>function</l><custom-block s="%s"><block var="function"/></custom-block></block></script><list></list></block><block s="doRun"><custom-block s="%cmdRing ( %mult%s )"><custom-block s="%obj . %s"><block var="function"/><l>body</l></custom-block><list><l>running context</l></list></custom-block><list><block s="reportNewList"><list><block s="reportNewList"><list><l>outer context</l><custom-block s="%obj . %s"><block var="function"/><l>outer context</l></custom-block></list></block><block s="reportNewList"><list><l>bindings</l><block s="reportListAttribute"><l><option>columns</option></l><block s="reportNewList"><list><custom-block s="%obj . %s"><block var="function"/><l>parameters</l></custom-block><block var="arguments"/></list></block></block></list></block></list></block></list></block></script></block-definition><block-definition s="%&apos;function&apos; ( %&apos;arguments&apos; ) $nl" type="reporter" category="Objects"><header></header><code></code><translations></translations><inputs><input type="%s" readonly="true" initial="1"><options>§_getVarNamesDict</options></input><input type="%mult%s"></input></inputs><script><block s="doIf"><block s="reportNot"><block s="reportIsA"><block var="function"/><l><option>list</option></l></block></block><script><custom-block s="let %upvar be %s"><l>running context</l><block s="reportAttributeOf"><l>running context</l><block s="reportEnvironment"><l><option>caller</option></l></block></block></custom-block><block s="doSetVar"><l>function</l><custom-block s="%s"><block var="function"/></custom-block></block></script><list></list></block><block s="doReport"><block s="evaluate"><custom-block s="%cmdRing ( %mult%s )"><custom-block s="%obj . %s"><block var="function"/><l>body</l></custom-block><list><l>running context</l></list></custom-block><list><block s="reportNewList"><list><block s="reportNewList"><list><l>outer context</l><custom-block s="%obj . %s"><block var="function"/><l>outer context</l></custom-block></list></block><block s="reportNewList"><list><l>bindings</l><block s="reportListAttribute"><l><option>columns</option></l><block s="reportNewList"><list><custom-block s="%obj . %s"><block var="function"/><l>parameters</l></custom-block><block var="arguments"/></list></block></block></list></block></list></block></list></block></block></script></block-definition><block-definition s="exec %&apos;script&apos; $nl" type="reporter" category="control"><header></header><code></code><translations></translations><inputs><input type="%cs" initial="1"></input></inputs><script><block s="doReport"><block s="evaluate"><custom-block s="%cmdRing ( %mult%s )"><block var="script"/><list><l>running context</l></list></custom-block><list><block s="reportNewList"><list><block s="reportNewList"><list><l>outer context</l><custom-block s="null"></custom-block></list></block><block s="reportNewList"><list><l>bindings</l><block s="reportNewList"><list></list></block></list></block></list></block></list></block></block></script></block-definition><block-definition s="console log %&apos;message&apos;" type="command" category="console"><header></header><code></code><translations></translations><inputs><input type="%s" initial="1"></input></inputs><script><block s="doAddToList"><block var="message"/><block s="reportApplyExtension"><l>var_get(name)</l><list><l>log</l></list></block></block><custom-block s="redraw console"></custom-block></script></block-definition><block-definition s="console clear" type="command" category="console"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doIfElse"><block s="reportIsA"><block var="log"/><l><option>list</option></l></block><script><block s="doDeleteFromList"><l><option>all</option></l><block var="log"/></block></script><script><block s="doSetVar"><l>log</l><block s="reportNewList"><list></list></block></block></script></block><custom-block s="redraw console"></custom-block></script></block-definition><block-definition s="redraw console" type="command" category="pen"><header></header><code></code><translations></translations><inputs></inputs><script><block s="doWarp"><script><block s="clear"></block><block s="setColor"><color>10,10,10,1</color></block><block s="doGotoObject"><l><option>center</option></l></block><block s="floodFill"></block><block s="setColor"><color>255,255,255,1</color></block><block s="gotoXY"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>4</l></list></block><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>bottom</option></l><l>Stage</l></block><l>4.5</l></list></block></block><block s="doForEach"><l>item</l><block s="reportListAttribute"><l><option>reverse</option></l><block s="reportApplyExtension"><l>var_get(name)</l><list><l>log</l></list></block></block><script><block s="write"><block var="item"/><l>12</l></block><block s="setPenColorDimension"><l><option>transparency</option></l><l>50</l></block><block s="setYPosition"><block s="reportVariadicSum"><list><block s="yPosition"></block><l>14</l></list></block></block><block s="setXPosition"><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block></block><block s="down"></block><block s="setXPosition"><block s="reportAttributeOf"><l><option>right</option></l><l>Stage</l></block></block><block s="up"></block><block s="gotoXY"><block s="reportVariadicSum"><list><block s="reportAttributeOf"><l><option>left</option></l><l>Stage</l></block><l>4</l></list></block><block s="reportVariadicSum"><list><block s="yPosition"></block><l>6</l></list></block></block><block s="setPenColorDimension"><l><option>transparency</option></l><l>0</l></block></script></block></script></block></script></block-definition></blocks><primitives></primitives><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="60" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" id="1261"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAAAXNSR0IArs4c6QAADo1JREFUeF7t1cEJACAMBEH9pv9+FSzC/UwaOBgCu2fmLEeAAAECBAh8FdgC/NXbGAECBAgQeAIC7BEIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECAgwH6AAAECBAgEAgIcoJskQIAAAQIC7AcIECBAgEAgIMABukkCBAgQICDAfoAAAQIECAQCAhygmyRAgAABAgLsBwgQIECAQCAgwAG6SQIECBAgIMB+gAABAgQIBAICHKCbJECAAAECAuwHCBAgQIBAICDAAbpJAgQIECBwATu2kkCKpfwbAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="1262"></list></costumes><sounds><list struct="atomic" id="1263"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites select="1"><sprite name="Sprite" idx="1" x="-236" y="-175.5" heading="90" scale="1" volume="100" pan="0" rotation="1" draggable="true" hidden="true" costume="0" color="255,255,255,1" pen="tip" id="1268"><costumes><list struct="atomic" id="1269"></list></costumes><sounds><list struct="atomic" id="1270"></list></sounds><blocks></blocks><variables></variables><scripts><script x="18.18181818181818" y="18.18181818181818"><custom-block s="console clear"></custom-block></script><script x="18.18181818181818" y="52.575757575757706"><custom-block s="exec %cs"><script><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>init</l><list></list><script><custom-block s="let %upvar be %s %br"><l>name</l><l>boo</l></custom-block><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>displayName</l><list></list><script><custom-block s="console log %s"><custom-block s="%s"><l>name</l></custom-block></custom-block></script></custom-block><custom-block s="%s ( %mult%s )"><l>displayName</l><list></list></custom-block></script></custom-block><custom-block s="%s ( %mult%s )"><l>init</l><list></list></custom-block></script><comment w="323.6363636363636" collapsed="false">function init() {&#xD;  var name = &quot;Mozilla&quot;; // name is a local variable created by init&#xD;  function displayName() {&#xD;    // displayName() is the inner function, that forms the closure&#xD;    console.log(name); // use variable declared in the parent function&#xD;  }&#xD;  displayName();&#xD;}&#xD;init();</comment></custom-block></script><script x="18.18181818181818" y="260.4242424242422"><custom-block s="exec %cs"><script><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>makeFunc</l><list></list><script><custom-block s="let %upvar be %s %br"><l>name</l><l>boo</l></custom-block><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>displayName</l><list></list><script><custom-block s="console log %s"><custom-block s="%s"><l>name</l></custom-block></custom-block></script></custom-block><block s="doReport"><custom-block s="%s"><l>displayName</l></custom-block></block></script></custom-block><custom-block s="let %upvar be %s %br"><l>myFunc</l><custom-block s="%s ( %mult%s ) %br"><l>makeFunc</l><list></list></custom-block></custom-block><custom-block s="%s ( %mult%s )"><l>myFunc</l><list></list></custom-block></script><comment w="168.18181818181822" collapsed="false">function makeFunc() {&#xD;  const name = &quot;Mozilla&quot;;&#xD;  function displayName() {&#xD;    console.log(name);&#xD;  }&#xD;  return displayName;&#xD;}&#xD;&#xD;const myFunc = makeFunc();&#xD;myFunc();</comment></custom-block></script><script x="18.18181818181818" y="498.1818181818185"><custom-block s="exec %cs"><script><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>makeAdder</l><list><l>x</l></list><script><block s="doReport"><custom-block s="function ( %mult%upvar ) %cs %br"><list><l>y</l></list><script><block s="doReport"><block s="reportVariadicSum"><list><custom-block s="%s"><l>x</l></custom-block><custom-block s="%s"><l>y</l></custom-block></list></block></block></script></custom-block></block></script></custom-block><custom-block s="let %upvar be %s %br"><l>add5</l><custom-block s="%s ( %mult%s ) %br"><l>makeAdder</l><list><l>5</l></list></custom-block></custom-block><custom-block s="let %upvar be %s %br"><l>add10</l><custom-block s="%s ( %mult%s ) %br"><l>makeAdder</l><list><l>10</l></list></custom-block></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><l>add5</l><list><l>2</l></list></custom-block></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><l>add10</l><list><l>2</l></list></custom-block></custom-block></script><comment w="163.63636363636363" collapsed="false">function makeAdder(x) {&#xD;  return function (y) {&#xD;    return x + y;&#xD;  };&#xD;}&#xD;&#xD;const add5 = makeAdder(5);&#xD;const add10 = makeAdder(10);&#xD;&#xD;console.log(add5(2)); // 7&#xD;console.log(add10(2)); // 12</comment></custom-block></script><script x="18.18181818181818" y="751.2727272727287"><custom-block s="exec %cs"><script><custom-block s="let %upvar be %s %br"><l>counter</l><custom-block s="%s ( %mult%s ) %br"><custom-block s="function ( %mult%upvar ) %cs %br"><list></list><script><custom-block s="let %upvar be %s %br"><l>privateCounter</l><l>0</l></custom-block><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>changeBy</l><list><l>value</l></list><script><custom-block s="set %s to %s %br"><l>privateCounter</l><block s="reportVariadicSum"><list><custom-block s="%s"><l>privateCounter</l></custom-block><custom-block s="%s"><l>value</l></custom-block></list></block></custom-block></script></custom-block><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list><l>increment</l><custom-block s="function ( %mult%upvar ) %cs %br"><list></list><script><custom-block s="%s ( %mult%s )"><l>changeBy</l><list><l>1</l></list></custom-block></script></custom-block></list></block><block s="reportNewList"><list><l>decrement</l><custom-block s="function ( %mult%upvar ) %cs %br"><list></list><script><custom-block s="%s ( %mult%s )"><l>changeBy</l><list><l>-1</l></list></custom-block></script></custom-block></list></block><block s="reportNewList"><list><l>value</l><custom-block s="function ( %mult%upvar ) %cs %br"><list></list><script><block s="doReport"><custom-block s="%s"><l>privateCounter</l></custom-block></block></script></custom-block></list></block></list></block></block></script></custom-block><list></list></custom-block></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter</l></custom-block><l>value</l></custom-block><list></list></custom-block></custom-block><custom-block s="%s ( %mult%s )"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter</l></custom-block><l>increment</l></custom-block><list></list></custom-block><custom-block s="%s ( %mult%s )"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter</l></custom-block><l>increment</l></custom-block><list></list></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter</l></custom-block><l>value</l></custom-block><list></list></custom-block></custom-block><custom-block s="%s ( %mult%s )"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter</l></custom-block><l>decrement</l></custom-block><list></list></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter</l></custom-block><l>value</l></custom-block><list></list></custom-block></custom-block></script><comment w="163.63636363636363" collapsed="false">const counter = (function () {&#xD;  let privateCounter = 0;&#xD;  function changeBy(val) {&#xD;    privateCounter += val;&#xD;  }&#xD;&#xD;  return {&#xD;    increment() {&#xD;      changeBy(1);&#xD;    },&#xD;&#xD;    decrement() {&#xD;      changeBy(-1);&#xD;    },&#xD;&#xD;    value() {&#xD;      return privateCounter;&#xD;    },&#xD;  };&#xD;})();&#xD;&#xD;console.log(counter.value()); // 0.&#xD;&#xD;counter.increment();&#xD;counter.increment();&#xD;console.log(counter.value()); // 2.&#xD;&#xD;counter.decrement();&#xD;console.log(counter.value()); // 1.</comment></custom-block></script><script x="18.18181818181818" y="1310.4848484848535"><custom-block s="exec %cs"><script><custom-block s="let %upvar be %s %br"><l>makeCounter</l><custom-block s="function ( %mult%upvar ) %cs %br"><list></list><script><custom-block s="let %upvar be %s %br"><l>privateCounter</l><l>0</l></custom-block><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>changeBy</l><list><l>value</l></list><script><custom-block s="set %s to %s %br"><l>privateCounter</l><block s="reportVariadicSum"><list><custom-block s="%s"><l>privateCounter</l></custom-block><custom-block s="%s"><l>value</l></custom-block></list></block></custom-block></script></custom-block><block s="doReport"><block s="reportNewList"><list><block s="reportNewList"><list><l>increment</l><custom-block s="function ( %mult%upvar ) %cs %br"><list></list><script><custom-block s="%s ( %mult%s )"><l>changeBy</l><list><l>1</l></list></custom-block></script></custom-block></list></block><block s="reportNewList"><list><l>decrement</l><custom-block s="function ( %mult%upvar ) %cs %br"><list></list><script><custom-block s="%s ( %mult%s )"><l>changeBy</l><list><l>-1</l></list></custom-block></script></custom-block></list></block><block s="reportNewList"><list><l>value</l><custom-block s="function ( %mult%upvar ) %cs %br"><list></list><script><block s="doReport"><custom-block s="%s"><l>privateCounter</l></custom-block></block></script></custom-block></list></block></list></block></block></script></custom-block></custom-block><custom-block s="let %upvar be %s %br"><l>counter1</l><custom-block s="%s ( %mult%s ) %br"><l>makeCounter</l><list></list></custom-block></custom-block><custom-block s="let %upvar be %s %br"><l>counter2</l><custom-block s="%s ( %mult%s ) %br"><l>makeCounter</l><list></list></custom-block></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter1</l></custom-block><l>value</l></custom-block><list></list></custom-block></custom-block><custom-block s="%s ( %mult%s )"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter1</l></custom-block><l>increment</l></custom-block><list></list></custom-block><custom-block s="%s ( %mult%s )"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter1</l></custom-block><l>increment</l></custom-block><list></list></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter1</l></custom-block><l>value</l></custom-block><list></list></custom-block></custom-block><custom-block s="%s ( %mult%s )"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter1</l></custom-block><l>decrement</l></custom-block><list></list></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter1</l></custom-block><l>value</l></custom-block><list></list></custom-block></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%obj . %s"><custom-block s="%s"><l>counter2</l></custom-block><l>value</l></custom-block><list></list></custom-block></custom-block></script><comment w="170.9090909090909" collapsed="false">const makeCounter = function () {&#xD;  let privateCounter = 0;&#xD;  function changeBy(val) {&#xD;    privateCounter += val;&#xD;  }&#xD;  return {&#xD;    increment() {&#xD;      changeBy(1);&#xD;    },&#xD;&#xD;    decrement() {&#xD;      changeBy(-1);&#xD;    },&#xD;&#xD;    value() {&#xD;      return privateCounter;&#xD;    },&#xD;  };&#xD;};&#xD;&#xD;const counter1 = makeCounter();&#xD;const counter2 = makeCounter();&#xD;&#xD;console.log(counter1.value()); // 0.&#xD;&#xD;counter1.increment();&#xD;counter1.increment();&#xD;console.log(counter1.value()); // 2.&#xD;&#xD;counter1.decrement();&#xD;console.log(counter1.value()); // 1.&#xD;console.log(counter2.value()); // 0.</comment></custom-block></script><script x="18.18181818181818" y="1951.4242424242514"><custom-block s="exec %cs"><script><custom-block s="let %upvar be %s %br"><l>e</l><l>10</l></custom-block><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>sum</l><list><l>a</l></list><script><block s="doReport"><custom-block s="function ( %mult%upvar ) %cs %br"><list><l>b</l></list><script><block s="doReport"><custom-block s="function ( %mult%upvar ) %cs %br"><list><l>c</l></list><script><block s="doReport"><custom-block s="function ( %mult%upvar ) %cs %br"><list><l>d</l></list><script><block s="doReport"><block s="reportVariadicSum"><list><custom-block s="%s"><l>a</l></custom-block><custom-block s="%s"><l>b</l></custom-block><custom-block s="%s"><l>c</l></custom-block><custom-block s="%s"><l>d</l></custom-block><custom-block s="%s"><l>e</l></custom-block></list></block></block></script></custom-block></block></script></custom-block></block></script></custom-block></block></script></custom-block><custom-block s="console log %s"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%s ( %mult%s ) %br"><custom-block s="%s ( %mult%s ) %br"><l>sum</l><list><l>1</l></list></custom-block><list><l>2</l></list></custom-block><list><l>3</l></list></custom-block><list><l>4</l></list></custom-block></custom-block></script><comment w="165.45454545454544" collapsed="false">// global scope&#xD;const e = 10;&#xD;function sum(a) {&#xD;  return function (b) {&#xD;    return function (c) {&#xD;      // outer functions scope&#xD;      return function (d) {&#xD;        // local scope&#xD;        return a + b + c + d + e;&#xD;      };&#xD;    };&#xD;  };&#xD;}&#xD;&#xD;console.log(sum(1)(2)(3)(4)); // 20</comment></custom-block></script><script x="18.18181818181818" y="2258.272727272737"><custom-block s="exec %cs"><script><custom-block s="let %upvar be %s %br"><l>e</l><l>10</l></custom-block><custom-block s="function %upvar ( %mult%upvar ) %cs"><l>sum</l><list><l>a</l></list><script><block s="doReport"><custom-block s="function %upvar ( %mult%upvar ) %cs %br"><l>sum2</l><list><l>b</l></list><script><block s="doReport"><custom-block s="function %upvar ( %mult%upvar ) %cs %br"><l>sum3</l><list><l>c</l></list><script><block s="doReport"><custom-block s="function %upvar ( %mult%upvar ) %cs %br"><l>sum4</l><list><l>d</l></list><script><block s="doReport"><block s="reportVariadicSum"><list><custom-block s="%s"><l>a</l></custom-block><custom-block s="%s"><l>b</l></custom-block><custom-block s="%s"><l>c</l></custom-block><custom-block s="%s"><l>d</l></custom-block><custom-block s="%s"><l>e</l></custom-block></list></block></block></script></custom-block></block></script></custom-block></block></script></custom-block></block></script></custom-block><custom-block s="let %upvar be %s %br"><l>sum2</l><custom-block s="%s ( %mult%s ) %br"><l>sum</l><list><l>1</l></list></custom-block></custom-block><custom-block s="let %upvar be %s %br"><l>sum3</l><custom-block s="%s ( %mult%s ) %br"><l>sum2</l><list><l>2</l></list></custom-block></custom-block><custom-block s="let %upvar be %s %br"><l>sum4</l><custom-block s="%s ( %mult%s ) %br"><l>sum3</l><list><l>3</l></list></custom-block></custom-block><custom-block s="let %upvar be %s %br"><l>result</l><custom-block s="%s ( %mult%s ) %br"><l>sum4</l><list><l>4</l></list></custom-block></custom-block><custom-block s="console log %s"><custom-block s="%s"><l>result</l></custom-block></custom-block></script><comment w="151.8181818181818" collapsed="false">// global scope&#xD;const e = 10;&#xD;function sum(a) {&#xD;  return function sum2(b) {&#xD;    return function sum3(c) {&#xD;      // outer functions scope&#xD;      return function sum4(d) {&#xD;        // local scope&#xD;        return a + b + c + d + e;&#xD;      };&#xD;    };&#xD;  };&#xD;}&#xD;&#xD;const sum2 = sum(1);&#xD;const sum3 = sum2(2);&#xD;const sum4 = sum3(3);&#xD;const result = sum4(4);&#xD;console.log(result); // 20</comment></custom-block></script></scripts></sprite><watcher var="undefined" style="normal" x="10" y="10" color="243,118,29" hidden="true"/></sprites></stage><variables><variable name="global"><l>0</l></variable><variable name="null"><context id="1897"><inputs></inputs><variables></variables><custom-block s="null"></custom-block><receiver><ref id="1268"></ref></receiver><origin><ref id="1268"></ref></origin><context id="1901"><inputs></inputs><variables></variables><receiver><ref id="1268"></ref></receiver><origin><ref id="1268"></ref></origin></context></context></variable><variable name="undefined"><context id="1903"><inputs></inputs><variables></variables><custom-block s="undefined"></custom-block><receiver><ref id="1268"></ref></receiver><origin><ref id="1268"></ref></origin><context id="1907"><inputs></inputs><variables></variables><receiver><ref id="1268"></ref></receiver><origin><ref id="1268"></ref></origin></context></context></variable><variable name="log"><list struct="atomic" id="1909"></list></variable></variables></scene></scenes></project><media name="closures" app="Snap! 10.6.0, https://snap.berkeley.edu" version="2"></media></snapdata>