Specificity - don't use a variable named variable unless it refers to something specific, like variable timing on an engine. Just don't do it.
In a given context:
Do not re-use variable names in a given context for different purposes. In a function, don't make variable = 'foo' for use as a string then later in the function make variable a numerical index in a loop - that's bad practice and will return to bite you in a big way.
You can re-use variable names in a given context for the same generic purpose, but consider using a new variable to avoid confusion:
var i, j, myarray = [];
for( i = 0; i < 100; i++){
//
mayarray.push[ i ];
}
for( j = 0; j < 1000; j++){
// something with j
}
You could technically re-use i for the second loop instead of using a new variable, j, but I would avoid re-use in this case because it can lead to confusion reading the code and could introduce bugs later on.
Outside the same context
We all re-use common variable names like i for loop indexes; that is good practice and improves readability as long as they are not in the same context.
If you are thinking about re-using a non-generic variable name, like partNumber, limit their re-use to places where they refer to the same logical thing in your code as other uses of the variable. Otherwise it can lead to confusion in your code.
Your application has a schema internally that shows the data you are manipulating. Map that schema to your variable names, use generic variable names for generic purposes, and be aware of your contexts for variable re-use.