Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.08.2013, 13:18
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Присваивание по ссылке и значению
Вот здесь я увидел пример:
function func() {
	var funcObj = arguments.callee

	funcObj.test++
	alert(funcObj.test)
}
func.test = 1
func()
func()

Ниже было примечание, что
Код:
В примере нельзя было сделать присвоение:

var test = arguments.callee.test
test++
так как при этом операция ++ сработала бы на локальной переменной test, а не на свойстве test объекта функции.
Почему так происходит? У меня есть предположение, что в JavaScript есть некий механизм передачи переменных по ссылке и по значению.

Возникли следующие вопросы:

1) Есть ли в JavaScript что-то похожее на передачу по ссылке?

2) Как можно понять, что записав var myvar=some.var, будет ли в var ссылка на объект или же создаётся новая локальная переменная? Если я сделаю myvar++, то я сделаю эту операцию на локальной переменной или же на объекте, на который ссылается эта переменная.
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2013, 13:53
Профессор
Отправить личное сообщение для Dmitriyff Посмотреть профиль Найти все сообщения от Dmitriyff
 
Регистрация: 22.07.2012
Сообщений: 164

строка и число всегда передаются по значению

все остальное по ссылке

var a = 1, 
     b = a;  // присваивается значение

b = 2; 
console.log(a, b); // 1, 2

var a = {},
     b = a;  // присваивается ссылка на объект

a.a = 1;
b.a = 2;

console.log(a.a, b.a) // 2, 2


a.a и b.a, это одна и таже переменная, потому как a и b ссылаются на один и тот же объект
Ответить с цитированием
  #3 (permalink)  
Старый 25.08.2013, 13:55
Профессор
Отправить личное сообщение для Dmitriyff Посмотреть профиль Найти все сообщения от Dmitriyff
 
Регистрация: 22.07.2012
Сообщений: 164

Сообщение от hrundel
2) Как можно понять, что записав var myvar=some.var, будет ли в var ссылка на объект или же создаётся новая локальная переменная? Если я сделаю myvar++, то я сделаю эту операцию на локальной переменной или же на объекте, на который ссылается эта переменная.
вы сделаете операцию на локальной переменной, переменная some.var не изменится
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2013, 14:26
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Здесь я увидел, что автор говорит следующее:
Цитата:
При этом, так как функция — это объект, то и копируется она «по ссылке».
А про это какая-нибудь статья полезная есть? Или может в ECMA про это пишут? Вопрос ведь интересный, сам часто спотыкался и не мог понять, почему код не работает.
Dmitriyff, спасибо, хороший пример.
Ответить с цитированием
  #5 (permalink)  
Старый 25.08.2013, 14:29
Кандидат Javascript-наук
Отправить личное сообщение для hrundel Посмотреть профиль Найти все сообщения от hrundel
 
Регистрация: 01.08.2009
Сообщений: 102

Сообщение от Dmitriyff Посмотреть сообщение
вы сделаете операцию на локальной переменной, переменная some.var не изменится
Значит надо постоянно отслеживать, что содержится в переменной? Если это функция, то держать в уме, что работа с неё будет по ссылке, если что-то другое, то по значению. По другому значит никак нельзя?
Ответить с цитированием
  #6 (permalink)  
Старый 25.08.2013, 15:40
Профессор
Отправить личное сообщение для Dmitriyff Посмотреть профиль Найти все сообщения от Dmitriyff
 
Регистрация: 22.07.2012
Сообщений: 164

думаю эта статья даст полный ответ и понимание что да как
Ответить с цитированием
  #7 (permalink)  
Старый 25.08.2013, 17:06
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,219

Сообщение от hrundel
Значит надо постоянно отслеживать, что содержится в переменной?
Зачем следить? Просто нужно понимать, что значения это только строка или число... Остальное просто ссылка...

Сообщение от hrundel
По другому значит никак нельзя?
Никак.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача значений по ссылке в функцию jQuery AlexDf jQuery 11 26.03.2015 20:58
Печать не по ссылке, а по кнопке mienne jQuery 6 12.07.2013 22:20
Как узнать по какой ссылке кликнули? Rooner jQuery 3 19.12.2012 17:14
Почему происходит копирование по значению, а не по ссылке? dump Общие вопросы Javascript 6 23.07.2012 23:16
Вызов метода jQuery по ссылке Murlakatam jQuery 1 29.04.2012 19:46