for instance
proc/AddVar(var/a,var/b)
a+=b // does this change the actual value of a?
return a
//consider that proc in mind
proc/TestAdd()
var/x=10
var/y=20
//AddVar(x,y) // wat will this result into? 10 or 30 ?
//x=AddVar(x,y) this will result in 30
world << "Yay x variable has the value [x]"
But I'll spare you the effort: var/x will have the value 10, a will have the value 30. Values in DM are passed 'by value' - that means that they're copied into the arguments. So the 'var/a' in proc/AddVar() is a variable specific to AddVar, and it's just set to the same value as var/x when AddVar is called.
Important caveat: Objects in DM are references to that object. So a var/obj/o isn't the actual object, it's a pointer to that object. When that is passed by value, the same object is being referenced. So this:
will output 10.