We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
for循环的原本执行流程如下:
for(let i=0;i<10;i++){ const sum = i; }
1、创建scope,执行init 2、创建scope,执行body() 3、执行test()和update()
这样产生一个问题,虽然执行body之前创建了新的scope,保证了每次循环都在新的scope内执行。但是body内的closure并没有新创建,还是原来的,也就是说,每次循环,body内的scope都是同一个。如果遇到了const,就会报错,因为不能重复赋值。所以,正确的执行流程应该是:
0、实现写好getClosure方法。 1、创建scope,执行init 2、调用getClosure(),获取一个全新的body执行closure,然后再执行closure()。这样可以保证每次循环执行的body都是全新的。 3、执行test()和update()
但是这样明显加大了运行时的开销。一种好的办法是clone一份body中运行时的scope完全样本,每次循环开始在从样本clone一份出来重置body的scope。这样少了新建closure的开销。
所以任务是:
The text was updated successfully, but these errors were encountered:
Sorry, something went wrong.
No branches or pull requests
for循环的原本执行流程如下:
1、创建scope,执行init
2、创建scope,执行body()
3、执行test()和update()
这样产生一个问题,虽然执行body之前创建了新的scope,保证了每次循环都在新的scope内执行。但是body内的closure并没有新创建,还是原来的,也就是说,每次循环,body内的scope都是同一个。如果遇到了const,就会报错,因为不能重复赋值。所以,正确的执行流程应该是:
0、实现写好getClosure方法。
1、创建scope,执行init
2、调用getClosure(),获取一个全新的body执行closure,然后再执行closure()。这样可以保证每次循环执行的body都是全新的。
3、执行test()和update()
但是这样明显加大了运行时的开销。一种好的办法是clone一份body中运行时的scope完全样本,每次循环开始在从样本clone一份出来重置body的scope。这样少了新建closure的开销。
所以任务是:
The text was updated successfully, but these errors were encountered: