In a strict function if all accesses of the rest param is `rest[expr]` and `rest.length` we could generate code that only references `arguments`. For example: ``` js 'use strict'; function f(x, ...xs) { for (let i = 0; i < xs.length; i++) { print(xs[i]); } } ``` Today we compile that into: ``` js 'use strict'; function f(x) { for (var xs = [], $__0 = 1; $__0 < arguments.length; $__0++) xs[$__0 - 1] = arguments[$__0]; for (var i = 0; i < xs.length; i++) { print(xs[i]); } } ``` But we could compile it into: ``` js 'use strict'; function f(x) { for (var i = 0; i < arguments.length - 1; i++) { print(arguments[i + 1]); } } ```
In a strict function if all accesses of the rest param is
rest[expr]andrest.lengthwe could generate code that only referencesarguments.For example:
Today we compile that into:
But we could compile it into: