我有一个执行AJAX调用的函数,如下:
let retrieveData = (section, sectionItem, callback) => {
...
}
第二个参数是可选的,即在某些情况下需要参数,在其他情况下则不是:
let data = retrieveData(aSection, aSectionItem, function(json)) {
...
});
和
let data = retrieveData(aSection, undefined, function(json)) {
...
});
在第二个实例中,我希望能够省略undefined
参数,并且我认为通过解构分配选项/默认值就是答案(根据此示例:https://javascript.info/destructuring-assignment#smart-function-parameters),但是我对如何构建代码很不满意。
答案 0 :(得分:3)
你当前的方式:
let retrieveData = (section, sectionItem, callback) => {
console.log('Section :', section);
console.log('Section item :', sectionItem);
console.log('Callback :', callback);
}
retrieveData('a', 'b', () => {});
retrieveData('a', undefined, () => {});

sectionItem
,则它将为undefined
。
let retrieveData = ({ section, sectionItem, callback }) => {
console.log('Section :', section);
console.log('Section item :', sectionItem);
console.log('Callback :', callback);
}
retrieveData({
section: 'a',
sectionItem: 'b',
callback: () => {}
});
retrieveData({
section: 'a',
callback: () => {}
});

sectionItem
:
let retrieveData = ({ section, sectionItem = 'defaultValue', callback }) => {
console.log('Section :', section);
console.log('Section item :', sectionItem);
console.log('Callback :', callback);
}
retrieveData({
section: 'a',
sectionItem: 'b',
callback: () => {}
});
retrieveData({
section: 'a',
callback: () => {}
});

sectionItem
移至功能的末尾,以便更省略。
let retrieveData = (section, callback, sectionItem) => {
console.log('Section :', section);
console.log('Section item :', sectionItem);
console.log('Callback :', callback);
}
retrieveData('a', () => {}, 'b');
retrieveData('a', () => {}); // Here you omit the parameter

let retrieveData = (options) => {
console.log('Section :', options.section);
console.log('Section item :', options.sectionItem);
console.log('Callback :', options.callback);
}
retrieveData({
section: 'a',
sectionItem: 'b',
callback: () => {}
});
retrieveData({
section: 'a',
callback: () => {}
});

答案 1 :(得分:0)
请使用可选参数,并deconstruct使用参数。
const foo = (section, {sectionItem, callback} = {}) {
console.log(section, sectionItem, callback);
}
因此sectionItem
和callback
都是可选的:
let data = retrieveData(aSection, {
sectionItem: 'some',
callback: json => {
...
},
});
通过这种方式,您可以拨打以下电话之一
:retrieveData(aSection)
retrieveData(aSection, {sectionItem: 'some'})
retrieveData(aSection, {callback: json => { ... }})
另一个重要的方面是,您可以保持调用方的详细可选参数正确。