Unpacking a few fields out of an options object is three or four lines of near-identical assignment at the top of every function. Destructuring does it in the parameter list, where it also documents what the function actually reads.
function request(options) {
var url = options.url;
var method = options.method || 'GET';
}
function request({ url, method = 'GET', headers = {} }) {
// ...
}
Combining it with default values replaces the || fallback chain, and correctly so — || substitutes the default for any falsy value, including 0 and the empty string, whereas a destructuring default only applies to undefined. Destructuring an argument that might be undefined throws, so a top-level default of {} is usually needed too.