Переменные a и b объявлены в самой внутренней функции и они являются свойствами лексического окружения (Lexical Environment) именно этой функции и видны только внутри нее (снаружи не видны).
Если бы переменные были бы заданы внутри функции с помощью var то это были бы свойства глобального объекта (в браузере window) и были бы доступны всюду, но в вашем случае это не так.
Если бы вы сказали для чего они вам там нужны, помочь вам стало бы возможным.
PS Вот так вот будет видно везде:
// и даже здесь
function byField(field) {
// теперь c и d доступны здесь (раз уж это вам так надо)
return function(a, b) {
var c = a, d = b;
return a[field] > b[field] ? 1 : -1;
}
}
Только правильнее было бы поступить так:
var compareByField = byField('num');
numbers.sort(compareByField(a, b));