Repository navigation
Avoid adding unnecessary closure for block scoping - #5246
Merged
loganfsmyth merged 1 commit intoFeb 13, 2017
Merged
Conversation
sophiebits
force-pushed
the
block-no-unnecessary-functions
branch
from
January 31, 2017 01:00
48a0bde to
3d73fca
Compare
Codecov Report@@ Coverage Diff @@
## master #5246 +/- ##
========================================
- Coverage 89.4% 89.2% -0.2%
========================================
Files 204 203 -1
Lines 9916 9851 -65
Branches 2670 2628 -42
========================================
- Hits 8865 8788 -77
- Misses 1051 1063 +12
Continue to review full report at Codecov.
|
Contributor
Author
|
cc @gaearon @hzoo @existentialism – Any thoughts on this? |
Contributor
|
Is this gonna make it into |
Member
|
This will land in 6, I'm investigating one last issue before we publish the next 6.x minor, so next few days probably. 7.x likely won't be for a few more weeks as a minimum, we've still got things we want to address for that. |
xtuc
approved these changes
Feb 9, 2017
When you write
```
for (const x of l) {
setTimeout(() => x);
}
```
we need to add a closure because the variable is meant to be block-scoped and recreated each time the block runs. We do this.
However, we also add the closure when no loop is present. This isn't necessary, because if no loop is present then each piece of code runs at most once. I changed the transform to only add a closure if a variable is referenced from within a loop.
sophiebits
force-pushed
the
block-no-unnecessary-functions
branch
from
February 11, 2017 00:51
3d73fca to
7f9af76
Compare
loganfsmyth
approved these changes
Feb 13, 2017
Member
|
Thanks again @spicyj 👌 |
Contributor
Author
|
Thank you all!! |
danez
added a commit
that referenced
this pull request
Feb 14, 2017
* Add new flow preset (#5288) * Fix PathHoister hoisting JSX member expressions on "this". (#5143) The PathHoister ignored member references on "this", causing it to potentially hoist an expression above its function scope. This patch tells the hoister to watch for "this", and if seen, mark the nearest non-arrow function scope as the upper limit for hoistng. This fixes #4397 and is an alternative to #4787. * Fix PathHoister hoisting before bindings. (#5153) Fixes #5149 and enables a few additional safe hoists. * Fix linting error * feature: Support pure expressions in transform-react-constant-elements (#4812) * Fix loose for-of with label (#5298) * Rewrite Hub as interface #5047 (#5050) * Rewrite Hub as interface #5047 * Update index.js * Avoid adding unnecessary closure for block scoping (#5246) When you write ``` for (const x of l) { setTimeout(() => x); } ``` we need to add a closure because the variable is meant to be block-scoped and recreated each time the block runs. We do this. However, we also add the closure when no loop is present. This isn't necessary, because if no loop is present then each piece of code runs at most once. I changed the transform to only add a closure if a variable is referenced from within a loop. * Add greenkeeperio-bot to mention-bot blacklist (#5301) [skip ci] * Upgrade lerna to current beta. (#5300) * Revert "Upgrade lerna to current beta." (#5303) * Add charset so tests work with convert-source-map@>1.4 (#5302) * Add CHANGELOG for 6.23.0 [skip ci] (#5304) * Update babel-types README from script. * v6.23.0 * Revert change that lerna force-committed. * Revert "Rewrite Hub as interface #5047" (#5306) * v6.23.1 * Revert lerna again
existentialism
pushed a commit
that referenced
this pull request
May 19, 2017
When you write
```
for (const x of l) {
setTimeout(() => x);
}
```
we need to add a closure because the variable is meant to be block-scoped and recreated each time the block runs. We do this.
However, we also add the closure when no loop is present. This isn't necessary, because if no loop is present then each piece of code runs at most once. I changed the transform to only add a closure if a variable is referenced from within a loop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When you write
we need to add a closure because the variable is meant to be block-scoped and recreated each time the block runs. We do this.
However, we also add the closure when a block is present but no loop is:
This isn't necessary, because if no loop is present then each piece of code runs at most once. I changed the transform to only add a closure if a variable is referenced from within a loop.
(Builds on #5236.)