В целом - ответ "никак". Потому что так делать не надо. Это не очевидно. Код с душком.
Но если очень хочется, то такие варианты:
1) Нормальный вариант (даже без душка):
func(1, undefined, undefined, 2)
2) Нормальный вариант - объявлять не переменные, а объект на вход c
деструктуризацией его свойств:
function func({ a, b, c, d }) {
return a+d
}
func({ a: 1, d: 2 });
То есть это сокращённый вариант от такого:
function func(data) {
return data.a+data.d
}
func({ a: 1, d: 2 });
3) Грязный вариант - создать новую функцию с забинжеными аргументами:
function func(a,b,c,d) { return a+d }
var badFunc = (a,d) => func.bind(null, a, undefined, undefined, d)();
badFunc(1,2)