// Of all these, only d must remain: the others are defined in the function, and // used from that scope, not the global scope. let a = 10; let b = 20; let c = 30; let d = 40; // This one must also remain: z in the function is not a local variable, but the // id in an object, so it does not affect scoping at all, and we use the global // z. let z = 50; globalThis.f = function([/*empty*/, r]) { let { a, b } = r; let { z: c } = r; let [/*empty*/, i, {foo : p, bar : q}] = r; return g(a, b, c, d, z); }; // As above, but now with array destructuring. let a2 = 10; let b2 = 20; let c2 = 30; let d2 = 40; globalThis.f2 = function(r2) { let [ a2, b2, c2 ] = r2; return g2(a2, b2, c2, d2); };