почему не удаляется объект
function setName(obj) { obj.names = 'Nicholas'; obj = new Object(); obj.xx ='Greg'; } var person = new Object(); setName(person); alert(person.names); почуму остается доступным свойство names?Мы ведь его вроде должны удалить после obj = new Object();? 2. <script> function createPerson(name){ var localPerson = new Object(); localPerson.names = name; return localPerson } createPerson('Nicholas'); alert(localPerson.names)//не работает </script> |
Со вторым случаем все просто:
localPerson - локальная переменная, вы ее возвращаете, но нигде не используете, поэтому алерт и не работает. То есть, должно работать вот так: var a = createPerson('Nicholas'); alert(a.names); |
function setName(obj) { // здесь вы создаете новое свойство у объекта переданного через параметр obj.names = 'Nicholas'; // здесь вы локально создаете новый объект // тем самым ссылку на объект переданный аргументом, теряете // но не заменяете объект тот что был передан аргументом obj = new Object(); // задаете свойство новому локальному объекту obj.xx ='Greg'; // при выходе из функции локальный объект будет уничтожен } |
skfyann,devote спасибо!!Все понял :)
|
В первом случае следствие из распространённого заблуждения, что объекты в JS передаются по ссылке. На самом деле, передаётся ссылка на объект, ссылка передаётся по значению, что не то же самое, что передача по ссылке.
|
Часовой пояс GMT +3, время: 04:32. |