Как было отмечено в моем комментарии к ответу Ахмеда Нуамана, сказав, что аргумент передаются по ссылке неверно , Доказывая, что тривиально:
function change (x) {
//"replace" x with a different object?
x = {
a : 4
};
}
var o = { a : 6 };
change(o);
console.log(o.a); //6
Если аргумент будет действительно был передан по ссылке, o.a
бы 4
. Однако аргумент передается ссылкой значение - в этом случае это просто и объект.
И вот почему вы наблюдали симптомы, представленные в вопросе: когда вы непосредственно изменили аргумент, объект, который был передан, был изменен.
Как будто у вас есть мороженое, а затем вернулся на подставку, чтобы попросить дополнительный совок ванили. У вас все еще есть та же чашка, но с этим лишним. Используя эту аналогию в приведенном выше примере, вы просите новое ванильное мороженое: у вас все еще есть старая, и это не изменилось (ну, возможно, оно немного расплавилось). В сценарии «перекрестная ссылка» вы бы сбросили свое существующее мороженое и получили новый.
В заключение: это не касается правил определения области видимости в js. Если eg
не было передано функции second
, оно было бы недоступно для него.
В чем вопрос? – Ven
Он передан по ссылке в 'obj.second()'. –
Этот ответ может немного помочь. http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language – AlexLordThorsen