Skip to content

Bug: destructuring + calling function with same param name as destructured var #3122

@xaviergonz

Description

@xaviergonz

Bug report

Uglify version (uglifyjs -V) latest

JavaScript input

(function() {

const animReq = (data) => {
  const { newRotation, character } = data;
  console.log('')
  const rotationDuration = getRotationDuration(newRotation, character.rotation);
  console.log('')
  return rotationDuration;
}

function getRotationDuration(newRotation, oldRotation) {
  return getRotationDeltaDuration(newRotation - oldRotation);
}

function getRotationDeltaDuration(rotationDelta) {
  const durationMultiplier = Math.round(Math.abs(rotationDelta)) / 180;
  if (durationMultiplier === 0) {
    return 0;
  }
  return lerp(150, 450, durationMultiplier);
}

function lerp(v0,v1,t) {
  return v0 * (1 - t) + v1 * t;
}


animReq({
  newRotation: 10,
  character: {
    rotation: 100
  }
});

})()

The uglifyjs CLI command executed or minify() options used.

npx uglify-es --compress -- test.js

JavaScript output or error produced.

The output is the following:

!function(){var newRotation,oldRotation;(data=>{const{newRotation:newRotation,character:character}=data;console.log("");const rotationDuration=(newRotation=newRotation,oldRotation=character.rotation,function(rotationDelta){const durationMultiplier=Math.round(Math.abs(rotationDelta))/180;return 0===durationMultiplier?0:150*(1-(t=durationMultiplier))+450*t;var t}(newRotation-oldRotation));console.log("")})({newRotation:10,character:{rotation:100}})}();

The problem is with the sequences compress option, which generates this part:

const{newRotation:newRotation,character:character}=data;
...
const rotationDuration=(newRotation=newRotation,...

where newRotation=newRotation fails because newRotation is const and cannot be reassigned

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions