В этом искусственном примере без разницы. В реальности внутри функции суорее всего будут локальные переменные, которве будут доступны из функции say и недоступны снаружи
не знаю где вы взяли этот "классический" пример. Так можно делать но совсем для других целей - чтобы скрыть переменные от окружающего кода, это подход 2010 года, сейчас для этих целей используются модули. К синглтону это все не имеет отношения.
Именно в данном примере - разницы между этими двумя вариантами нет.
По факту - это не синглтон, это у вас объект со свойством-функцией, который зачем-то назвали так, видимо в попытке хоть как-то эмулировать паттерн пришедший из других языков.
Сейчас вы просто можете сделать нормальный класс и использовать как синглтон в "классическом" смысле.