#let binds an identifier with some value evaluated from the given text. Any time you use the identifier in an expression, the value is substituted.
#let is different from #def in that evaluation of the given text occurs immediately. With #def, the expression is saved; with #let, the expression is evaluated and value is saved.
#let x 42
#let y ${x + 5}
#def z ${x + 5}
#let x 0
${y} // Gives 47
${z} // Gives 5