I would highly recommend extreme caution when using default parameter values in javascript. It often creates bugs when used in conjunction with higher order functions like forEach
, map
, and reduce
. For example, consider this line of code:
['1', '2', '3'].map(parseInt); // [1, NaN, NaN]
parseInt has an optional second parameter function parseInt(s, [
radix=10])
but map calls parseInt
with three arguments: (element, index, and array).
I suggest you separate your required parameters form your optional/default valued arguments. If your function takes 1,2, or 3 required parameters for which no default value makes sense, make them positional parameters to the function, any optional parameters should follow as named attributes of a single object. If your function takes 4 or more, perhaps it makes more sense to supply all arguments via attributes of a single object parameter.
In your case I would suggest you write your deleteFile function like this: (edited per instead
's comments)...
// unsafe_x000D_
function read_file(fileName, deleteAfter=false) {_x000D_
if (deleteAfter) {_x000D_
console.log(`Reading and then deleting ${fileName}`);_x000D_
} else {_x000D_
console.log(`Just reading ${fileName}`);_x000D_
}_x000D_
}_x000D_
_x000D_
// better_x000D_
function readFile(fileName, options) {_x000D_
const deleteAfter = !!(options && options.deleteAfter === true);_x000D_
read_file(fileName, deleteAfter);_x000D_
}_x000D_
_x000D_
console.log('unsafe...');_x000D_
['log1.txt', 'log2.txt', 'log3.txt'].map(read_file);_x000D_
_x000D_
console.log('better...');_x000D_
['log1.txt', 'log2.txt', 'log3.txt'].map(readFile);
_x000D_
Running the above snippet illustrates the dangers lurking behind default argument values for unused parameters.