家里装了智能路由器、摄像头、温控器,想用网页做个简单的控制面板?写点JavaScript是免不了的。很多人卡在第一步:函数怎么传参才灵活又省事。
函数参数不是只能传数字和文字
比如你有个函数要设置Wi-Fi名称和密码,最基础的写法是这样:
function setWifi(name, password) {
console.log('网络名称:' + name);
console.log('密码:' + password);
}
setWifi('MyHomeNet', '12345678');
看着没问题,但要是以后还想加隐藏网络、频段选择这些选项,参数越堆越多,调用时容易搞混顺序。
用对象传参,配置更清晰
换成传一个对象,参数再多也不怕乱:
function setWifi(config) {
console.log('网络名称:' + config.name);
console.log('密码:' + config.password);
console.log('是否隐藏:' + (config.hidden ? '是' : '否'));
}
setWifi({
name: 'MyHomeNet',
password: '12345678',
hidden: true
});
这样一目了然,改配置的时候也不用数参数位置。
默认值让常用设置更省事
大多数时候你可能都不需要隐藏网络,那就给它设个默认值:
function setWifi({ name, password, hidden = false }) {
console.log('网络名称:' + name);
console.log('密码:' + password);
console.log('是否隐藏:' + (hidden ? '是' : '否'));
}
// 调用时可以不写 hidden
setWifi({
name: 'LivingRoomCam',
password: 'abcd1234'
});
这样日常使用少打几个字,关键设置还不会丢。
还能再简化?试试解构参数
函数内部不用反复写 config.xxx,直接在参数里解构:
function setWifi({ name, password, hidden = false, band = '2.4G' }) {
console.log(`连接到 ${band} 频段`);
console.log(`网络名称:${name}`);
console.log(`是否隐藏:${hidden ? '是' : '否'}`);
}
连默认频段都预设好,调用时想改就改,不想管就用默认,特别适合家里老人操作的界面。
动态设备管理靠剩余参数
假如你要批量重启家里的智能设备,数量不固定,可以用剩余参数:
function rebootDevices(...devices) {
devices.forEach(device => {
console.log(`${device} 正在重启...`);
});
}
rebootDevices('客厅灯', '门铃摄像头', '厨房插座');
来一个处理一个,来十个也一样办。
写家庭自动化小工具时,别小看函数参数的设计。用对方式,代码看着清爽,改起来也快,下次路由器固件更新要加新功能,自己动手一点都不难。