Передача примитива в функцию JavaScript в качестве аргумента является копией значения, являющегося (т. Е. Создаваемой новой переменной), переданной в функцию, или это просто указатель на расположение переменных в памяти, как то, что происходит с объектами? Поскольку объекты изменяемы, их легко доказать, однако, поскольку примитивы неизменны, они всегда будут переназначены, поэтому трудно сказать, что происходит за кулисами.Как примитивы передаются в функции как аргументы в JavaScript?
В следующем коде (http://jsbin.com/egufog/2/edit) показывает, что я имею в виду:
var pvalue = 'foo'; //primitive
var ovalue = { foo : 'foo' }; //object
changeMe(pvalue, ovalue); //changes values
console.log(pvalue, ovalue); //pvalue unchanged, ovalue was changed
reassignMe(ovalue); //reassigns the object, breaking the reference
console.log(ovalue); //ovalue remains unchanged
function changeMe(primitive, obj){
primitive = 'bar'; //did this reassign the pointer or just create another variable?
obj.foo = 'bar'; //updates the object in memory
}
function reassignMe(obj) {
obj = { baz : 'baz' }; //reassignment breaks the pointer reference
}
Я предполагаю, что они переданы как ценность, потому что это будет последовательным и более эффективным, но как это имеет значение? Вы говорите себе, что не видите разницы. –
Я предполагаю, что это деталь реализации. –
Что вы спрашиваете? Я только прошу об этом, потому что в вашем вопросе вы сказали «легко доказать», а затем продолжили доказывать это нам прямо после этого. Извините за репост, случайно отправил это как ответ. –