The problem here is the definition of "call by reference". In C++ that means being able to change the value outside of the function taking the reference.
void setByReference(float& v) { v = 123; }
float v;
setByReference(v);
cout << v; // prints 123
That feature of being able to pass by reference doesn't exist in say, JavaScript. you can only pass by value in JavaScript. The types of values in JS are undefined, null, boolean, number, string, reference-to-function, reference-to-object. You can never pass anything by reference, only by value.And that's where it gets confusing. If you have a variable who's value is a reference-to-object you pass the value. The value being "reference-to-object"
To re-iterate
const n = 1; fn(n); // call by value, type of value = number
const s = 'abc' fn(s); // call by value, type of value = string
const o = {} fn(o); // call by value, type of value = reference-to-object
In C++ though, you pass the a reference to the variable itself (in the example above). That's called call-by-reference.I can see why the OP feels it's muddled.