Я вижу тут два варианта.
Первый: хеш
область определений: (a=x); функция: f=function(z)->z;
применяем f к a: f(a) выхлоп — x; тут у нас область значений совпадает с value хеша. соответственно, область значений тут — некое множество {x}
Второй: множество
область определений: (a); функция: f=function(z)->z;
применяем f к a: f(a) выхлоп undefined; тут у нас область значений вообще неизвестна. мы можем дополнительно определить ее как {z}
Второе определение, однако, противоречит определению функции как отображения, поскольку, если на момент применения нет той области, в которую оатобржается, значит мы не можем сказать, что это «отображение в». Тут нет декларативности, как бы.
Однако, и первое определение с душком, ибо возникает вопрос, если отображение у нас уже определено, зачем тогда нужно дополнительно что-то (например функцию) определять, ведь и так очевидно, что куда «отображается».