Весь этот сложный код в JavaScript, кажется, просто пытается кэшировать значение даты. В Scala вы можете добиться того же самого тривиально:
lazy val foo = new Date
И, если вы даже не хотите создавать val, но хотите вызвать функцию, которая будет выполнять дорогостоящий код только тогда, когда это необходимо, вы можете
def maybeExpensive(doIt: Boolean, expensive: => String) {
if (doIt) println(expensive)
}
maybeExpensive(false, (0 to 1000000).toString) // (0 to 1000000).toString is never called!
maybeExpensive(true, (0 to 10).toString) // It is called and used this time
где шаблон expensive: => String
называется параметром по имени, который можно представить как «Дайте мне что-то, что сгенерирует строку по запросу». Обратите внимание, что если вы используете его дважды, он будет регенерировать его каждый раз, и именно здесь появляется удобный образец Рэндалла Шульца:
def maybeExpensiveTwice(doIt: Boolean, expensive: => String) {
lazy val e = expensive
if (doIt) {
println(e)
println("Wow, that was " + e.length + " characters long!")
}
}
Теперь вы генерируете, только если вам это нужно (через параметр by-name), и сохраните его и используйте повторно, если оно вам понадобится снова (через lazy val).
Так что делайте так, а не JavaScript, даже если вы могли бы сделать Scala похожим на JavaScript.