擅长:python、mysql、java
<p>在python和JavaScript中,当参数在闭包中被绑定时,</em><strong>默认值</strong>之间的差异。虽然JavaScript和Python都使用后期绑定,但在默认参数的情况下,Python模拟早期绑定,而JavaScript不模拟。在</p>
<p>这就是说,如果您要创建这样的闭包,那么您可以充分利用它们,诚实地将所有参数都抛弃掉。在</p>
<p>您提到了<code>let</code>的用法,如果您想在for循环中定义函数,这一点很重要,因为否则{<cd2>}将始终是迭代器的最大值(由于JavaScript闭包的后期绑定)。在</p>
<p>试试这个:</p>
<p/><div^{cl1}$&13;
<div^{cl2}$&13;
<pre class="snippet-code-js lang-js prettyprint-override"><code>funcs = [];
for (let i=0; i<5; i++) {
funcs.push(function () {console.log(i)});
}
funcs[2]();</code></pre>
;
</div>和13;
</div>和13;
<p>或者,如果您希望遵循不在循环中定义函数的良好实践,可以在外部定义函数,并使用<code>.bind()</code>传递变量。需要注意的是,此方法将在调用<code>.bind()</code>时将变量与值绑定,因此不必使用<code>let</code></p>
<p/><div^{cl1}$&13;
<div^{cl2}$&13;
^{pr2}$
;
</div>和13;
</div>和13;