Ich würde sehr empfehlen, extreme Vorsicht bei der Verwendung von Standard-Parameterwerte in Javascript. Es schafft oft Fehler, wenn sie in Verbindung mit Funktionen höherer Ordnung wie forEach
, map
und reduce
. Betrachten Sie zum Beispiel diese Codezeile:
['1', '2', '3'].map(parseInt); // [1, NaN, NaN]
parseInt hat einen optionalen zweiten Parameter function parseInt(s, [
radix =10])
aber die Karte ruft parseInt
mit drei Argumenten: ( Element , Index und array ).
Ich schlage vor, dass Sie Ihre erforderlichen Parameter von Ihren optionalen/standardmäßigen Argumenten trennen. Wenn Ihre Funktion 1, 2 oder 3 erforderliche Parameter benötigt, für die kein Standardwert sinnvoll ist, machen Sie sie zu Positionsparametern der Funktion, alle optionalen Parameter sollten als benannte Attribute eines einzelnen Objekts folgen. Wenn Ihre Funktion 4 oder mehr Parameter benötigt, ist es vielleicht sinnvoller, alle Argumente über Attribute eines einzelnen Objektparameters zu übergeben.
In Ihrem Fall würde ich vorschlagen, Sie schreiben Ihre deleteFile-Funktion wie folgt: ( bearbeitet per instead
's Kommentare )...
// unsafe
function read_file(fileName, deleteAfter=false) {
if (deleteAfter) {
console.log(`Reading and then deleting ${fileName}`);
} else {
console.log(`Just reading ${fileName}`);
}
}
// better
function readFile(fileName, options) {
const deleteAfter = !!(options && options.deleteAfter === true);
read_file(fileName, deleteAfter);
}
console.log('unsafe...');
['log1.txt', 'log2.txt', 'log3.txt'].map(read_file);
console.log('better...');
['log1.txt', 'log2.txt', 'log3.txt'].map(readFile);
Die Ausführung des obigen Schnipsels veranschaulicht die Gefahren, die hinter Standardargumenten für nicht verwendete Parameter lauern.