Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   return {блок} (https://javascript.ru/forum/misc/43437-return-%7Bblok%7D.html)

Vampir3 05.12.2013 10:39

return {блок}
 
Скажите, когда и для чего используется конструкция, где после return стоит блок?
что он возвращает и как ей пользоваться?
просто
(function(){
return {1}
})();

выдает ошибку missing : after property id

спасибо.

Arramis 05.12.2013 10:56

фигурные скобки говорят о том что функция возвратит объект, в вашем случаем выдается ошибка из - за того, что для ключа 1 нету соответсвующего значения.
Без ошибок будет, например так:
(function(){
	return {
		1: 1
	}				
})();

Maxmaxmaximus3 05.12.2013 15:23

ретурн не принимает блоки, по этому будет синтаксическая ошибка.
а так, блок возвращает результат последнего выполненного выражения

ksa 05.12.2013 15:44

Цитата:

Сообщение от Maxmaxmaximus3
блок возвращает результат последнего выполненного выражения

Тут кагбе примерчик этого посмотреть ...

ksa 05.12.2013 15:50

Цитата:

Сообщение от Maxmaxmaximus3
а так, блок возвращает результат последнего выполненного выражения

Цитата:

Блок

Группировка javascript-вызовов внутри фигурных скобок
Синтаксис
{
	   statement_1
	   statement_2
	   ...
	   statement_n
	}

Аргументы
statement_1, statement_2, ..., statement_n
Вызовы внутри блока
http://javascript.ru/Blok

Про "выражения" и "возвраты результатов" ни слова... ;)

Arramis 05.12.2013 16:22

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 284750)
ретурн не принимает блоки, по этому будет синтаксическая ошибка.
а так, блок возвращает результат последнего выполненного выражения

что значит ретурн не принимает блоки ??? ошибка из-за того, что литерал возвращаемого объекта не корреткно был написан.
Функция может возвращать все что угодно, в частности и объект (пустой или не пустой)
(function() {
   return {};
}());
зачем вводить людей в заблуждение ??

Maxmaxmaximus3 05.12.2013 17:52

Цитата:

Сообщение от Arramis
что значит ретурн не принимает блоки ???

это как ретурн принимает блоки, только наоборот, глупенький =)

Цитата:

Сообщение от ksa
Про "выражения" и "возвраты результатов" ни слова...

всему тебя учить =)
alert( eval('{1+2}') )

ивал возвращает результат последнего выражения, последнее выражение это блок, блок возвращает результат последнего выражения в нем.

Vampir3 05.12.2013 17:54

var tzdragg = function() {
	return {
		startMoving : function(evt) { 
			evt = evt || window.event;
			var posX = evt.clientX,
			posY = evt.clientY, 
			a = $('elem'),
			divTop = a.style.top,
			divLeft = a.style.left;
			divTop = divTop.replace('px','');
			divLeft = divLeft.replace('px','');
			var diffX = posX - divLeft,
			diffY = posY - divTop; 
			document.onmousemove = function(evt){ 
				evt = evt || window.event;
				var posX = evt.clientX,
				posY = evt.clientY,
				aX = posX - diffX, 
				aY = posY - diffY; 
				tzdragg.move('elem',aX,aY); 
			}
		},
		stopMoving : function() {
			document.onmousemove = function(){}
		},
		move : function(divid,xpos,ypos){
			var a = $(divid);
			$(divid).style.left = xpos + 'px';
			$(divid).style.top = ypos + 'px';
		}
	}
}();


ну вот например кусок кода для drag&drop, в котором это есть
или я чего-то не понимаю?)

Maxmaxmaximus3 05.12.2013 17:55

Vampir3, да, ты не понимаешь чем обьект отличается от блока =) все просто.

Vampir3 05.12.2013 17:55

ах, я всё понял
всё верно, это же объект

Maxmaxmaximus3 05.12.2013 17:59

и если честно то я считаю это ошибкой, то что нельзя присваивать блоки. эта ошибка возникла тупо из за неоднозначности при парсинге. вот и все. в самой логике экмы такое не запрещено, блок это как запятая только круче:

return 1,2,3; вернет 3;
return {1+2; 3+4}; должно по идее вернуть 7 но парсер думает что мы декларируем обьект и кидает ошибку =)

Я считаю это глупостью, и я считаю что ни какой неоднозначности нет, парсер способен отличить декларацию обьекта от блока =) по крайней мере я бы сделал такой парсер.

Arramis 05.12.2013 18:01

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 284779)
это как ретурн принимает блоки, только наоборот, глупенький =)

извини, но я твой инопланетный язык не понимаю вообще ни в какую, как может ретурн что то принимать ??? это интструкция для возврата результата(в js любое корректное выражение) выполнения функции. return означает возвращать а не принимать.

ksa 05.12.2013 18:34

Цитата:

Сообщение от Maxmaxmaximus3 (Сообщение 284779)
всему тебя учить =)
alert( eval('{1+2}') )

ивал возвращает результат последнего выражения ...

У автора был ивал? :D

alert({2+1});

Цитата:

Syntax error at line 13 while loading: syntax error
alert({2+1});
--------^

ksa 05.12.2013 18:35

Цитата:

Сообщение от Maxmaxmaximus3
и если честно то я считаю это ошибкой

Я патсталом... :lol:

Цитата:

Сообщение от Maxmaxmaximus3
return {1+2; 3+4}; должно по идее вернуть 7 но парсер думает что мы декларируем обьект и кидает ошибку =)

Т.е. вся твоя логика и знание идут в лес... :lol:

ksa 05.12.2013 18:38

Цитата:

Сообщение от Maxmaxmaximus3
Я считаю это глупостью, и я считаю что ни какой неоднозначности нет, парсер способен отличить декларацию обьекта от блока =) по крайней мере я бы сделал такой парсер.

Ну тут диагноз однозначно...

Maxmaxmaximus3 05.12.2013 19:00

Цитата:

Сообщение от ksa
У автора был ивал?

нет
Цитата:

Сообщение от ksa
Я патсталом...

почему?
Цитата:

Сообщение от ksa
Ну тут диагноз однозначно...

какой диагноз? чо ты несешь, поехавший?

Цитата:

Сообщение от Arramis
как может ретурн что то принимать

ну, смотри, ретурн унарный оператор и принимает на вход значение справа. тебе стоит почитать стандарт, и ты поймешь как операторы могут что-то принимать)

Цитата:

Сообщение от Arramis
return означает возвращать а не принимать.

оо, вон оно как.. буду знать, спасибо =)


У меня начинает создаваться впечатление что обитатели этого форума на столько тупые что за исключением 1-3 человек даже не понимают о чем я говорю =) ну то есть они на столько технически не грамотные, что вещи о которых я им говорю им кажутся магией, или я не прав?


Цитата:

Сообщение от Arramis
извини, но я твой инопланетный язык не понимаю вообще ни в какую, как может ретурн что то принимать ??? это интструкция для возврата результата(в js любое корректное выражение) выполнения функции. return означает возвращать а не принимать.

если честно я в голос проиграл )))))

Это называется дядя Леша зашел в раздел общи вопросов где новички сидят :)

ksa, чувак, ладно он, но я не думал что ТЫ такой нуб.. Не, ну правда... Сравни карму свою и мою. Как так можно то?

А это вам нубам на закуску =)





дело в том что блоки не могут участвовать в выражениях, из за возможности перепутать их с обектами =) но я считаю что там неоднозначности нет и я бы написал такой парсер который бы корректно хавал это =)

Вот кстати вам еще один пример некорректного парсинга:



Грубо говоря они прописали правило "блоки не могут учавствовать в выражениях" и он думает что {34} + 11 это {34}; +11

В принципе может это и логично так как нет острой необходимости использовать блок в выражениях, а парсинг при этом усложняется и держу пари там есть какие-то неоднозначности, но я думаю все же можно обойти их. я бы обошел.

Maxmaxmaximus3 05.12.2013 20:00

Ну чо, куда вы подевались то)? Я хочу наслаждаться вашими глазами сфоткайте пожалуйста ваши лица ^__^ я хочу на них посмотреть щас.

Arramis 05.12.2013 20:26

Maxmaxmaximus3
ты своими фанатическими домыслами не сумеешь ниче тут доказать/опровергнуть.
Специально ради тебя полез в стандарт ecma проверить инструкцию return.
return statement. Там не говорится что return принимает данные и точка. return возращает, принимая результат выполнения функции. Важен конечный результат инструкции, а не начальный. Иди своим колхозным подходом студентов однокурсников запугивай.

Maxmaxmaximus3 05.12.2013 20:33

я не понял твою мысль, я что-то не так говорю что не является правдой? ВОПРОС: что?

Arramis 05.12.2013 20:36

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

Maxmaxmaximus3 05.12.2013 20:53

Цитата:

Сообщение от Arramis
Там не говорится что return принимает данные и точка. return возращает, принимая результат выполнения функции.

результат выполнения функции это данные, ретурн принимает данные. ты сказал что ретурн ничего не принимает а только возвращает. А теперь иди учи яваскрипт, мальчик =)

Цитата:

Сообщение от Arramis
Там не говорится что return принимает

Цитата:

Сообщение от Arramis
return возращает, принимая

Или лучше русский язык поучи, а то у тебя видимо проблемы с пониманием значений слов =)
приниМАЯ это форма слова принимаЕТ, глупый =)

Maxmaxmaximus3 06.12.2013 15:19

все, девочки, ответить нечего? а ну убежали под шконку тогда) дядя Леша господствует. я бог яваскрипта

ksa 06.12.2013 15:37

Цитата:

Сообщение от Maxmaxmaximus3
я бог яваскрипта

Одна подруга хвастает другой:
- А мой меня назвал зайкой бала!
- Так прям и назвал?
- Да. Так и сказал "ты заябала!!!"

Maxmaxmaximus3 06.12.2013 15:49

шути еще, ты шутишь смешно


Часовой пояс GMT +3, время: 17:06.