When creating a variable using val or var and assigning the value of an expression into it the expression is evaluated when the variable is created. When creating a function using def and assigning the value of an expression to it the expression is evaluated when calling the function.
object Program { def main(args: Array[String]):Unit = { var a = 3 var b = 4 var c = 5 val e1 = if (b>a) "spiderman" else "wonderwoman" var e2 = if (b>a) "spiderman" else "wonderwoman" def e3 = if (b>a) "spiderman" else "wonderwoman" a = 7 println(e1) println(e2) println(e3) } }
The following video clip goes over this code sample and explains it.