Это все по значению, если вы понимаете программирование на С, вы будете знакомы с концепцией указателей.
Представьте, что указатель указывает на что-то в памяти, а все имена переменных "bob from (bob = new person ();)" по сути являются указателями, с которыми вы работаете.
Теперь, когда вы объявляете функцию, так как все они по значению
function Test(a:Object, b:Object):void {
a = b;
}
Вы можете думать, что и "a", и "b" являются новыми указателями, поэтому только в функции "Test" существуют и "a", и "b", которые указывают на что-то в памяти.
Так что давайте использовать это
var s1:Sprite = null;
var s2:Sprite = new Sprite;
Test(s1,s2);
Таким образом, указатели s1 и s2 ВСЕГДА будут указывать на «ноль» и «новый спрайт в памяти» соответственно, если они не будут изменены как s1 и s2 в своей «области видимости» <- Пожалуйста, убедитесь, что вы понимаете переменную область видимости, прежде чем даже пытаясь справиться с этим. </p>
И теперь внутри функции у нас есть два новых указателя «a», указывающих на «null» и «b», указывающих на «тот же спрайт в памяти, что и s2». Так как объекты и массивы по сути являются коллекциями указателей, и только две новые указатели были созданы функцией для использования «a» и «b» любых свойств / переменных переменных «указатели на данные в памяти» из «a» или «b» все равно будет точно таким же, как и для "s1" и "s2", и будут точно такими же указателями.
Таким образом, внутри функции, когда для "a" установлено значение "b", на самом деле все, что происходит, - это то, что указатель "a" теперь указывает на то же самое, что и "b". Но «s1» и «s2» по-прежнему указывают на то, на что они указывали раньше.
!!!!
Если бы это было по ссылке, вы не могли бы думать о «a» и «b» как о новых указателях, они фактически были бы самими «s1» и «s2», за исключением того, что вы записали их как «a» и «b» .