Cheating JS

as Java developer, my intuition for JS sucks.

by David Gonzalez

HTML

<div id= "out">
</div>

JavaScript

function write(text){
	document.getElementById("out").appendChild(document.createTextNode(text));
  document.getElementById("out").appendChild(document.createElement("BR"));
}
function passByValue(value){
	write("passByValue "+ value);
	value = 20;   
	write("passByValue "+ value);
}

function passByValueObject(value){ // You are not in Java anymore
	write("passByValueObject "+ value);
	value = "20";   
	write("passByValueObject "+ value);
}

function passByReferenceProperty(ref){ // Welcome to JS pass by reference
	write("passByReferenceProperty "+ ref.value);
	ref.value = 20;   
	write("passByReferenceProperty "+ ref.value);
}

function passByValueObjectReference(ref){ 
	write("passByValueObjectReference "+ ref.value.value);
	ref.value = {value: "20"};   
	write("passByValueObjectReference "+ ref.value.value);
}
function passByReferenceObject(ref){ 
	write("passByReferenceObject "+ ref.value.value);
	ref.value.value= "20";   
	write("passByReferenceObject "+ ref.value.value);
}
function passByReferenceObjectProperty(object){ 
	write("passByReferenceObjectProperty "+ object.value);
	object.value =  "20";   
	write("passByReferenceObjectProperty "+ object.value);
}

var value = 10;
var objectValue = "10";
var valueProperty = {value: 10};
var object = {value: "10"};

passByValue(value);
write("passByValue "+ value);

passByValueObject(value);
write("passByValueObject "+ objectValue);

passByReferenceProperty(valueProperty);
write("passByReferenceProperty "+ valueProperty.value);

passByValueObjectReference({ value: object});
write("passByValueObjectReference "+ object.value);

passByReferenceObject({ value: object});
write("passByReferenceObject "+ object.value);
 object = {value: "10"};
var ref = { value: object};
passByReferenceObject(ref);
write("passByReferenceObject "+ ref.value.value  + ". Catched update reference");
 object = {value: "10"};
passByReferenceObjectProperty(object);
write("passByReferenceObjectProperty "+ object.value);