Принцип работы опциональных аргументов в функциях js?
Увидел в гугловских доках что-то типа такого
chrome.tabs.setZoom(
tabId?: number,
zoomFactor: number,
callback?: function,
)
Я могу представить что-то такое с помощью if-ов и typeof, когда у нас каждый параметр имеет разный тип данных, но не очень понимаю, как в приведенном выше примере наша функция поймет, опустил я tabId или нет.
Ответы (1 шт):
Автор решения: Qwertiy
→ Ссылка
Например, так:
function f(id, zoom, callback) {
if (typeof zoom === "function") {
callback = zoom
zoom = id
id = -1
} else if (typeof zoom === "undefined") {
zoom = id
id = -1
}
console.log(id, zoom, callback)
}
f(100)
f(42, 100)
f(100, () => {})
f(42, 100, () => {})
console.log("")
f("oops")
f(42, "oops")
f("oops", () => {})
f(42, "oops", () => {})
.as-console-wrapper.as-console-wrapper { max-height: 100vh; }
Кстати, можно даже упростить (хотя не факт, что стоит - вдруг кто-то строку засунет?):
function f(id, zoom, callback) {
if (typeof zoom !== "number") {
callback = zoom
zoom = id
id = -1
}
console.log(id, zoom, callback)
}
f(100)
f(42, 100)
f(100, () => {})
f(42, 100, () => {})
console.log("")
f("oops")
f(42, "oops")
f("oops", () => {})
f(42, "oops", () => {})
.as-console-wrapper.as-console-wrapper { max-height: 100vh; }