Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Смишных картинок тред (https://javascript.ru/forum/offtopic/35821-smishnykh-kartinok-tred.html)

nerv_ 28.11.2013 21:44

Цитата:

Сообщение от Gozar
Что еще за значение блока? расскажи поподробней, может я чего не знаю и у блоков есть значения?

да он укурен по самые помидоры )

DjDiablo 28.11.2013 22:11

Цитата:

Сообщение от nerv_ (Сообщение 283383)
да он укурен по самые помидоры )

Ты что то имеешь против помидоров ? :lol:

monolithed 28.11.2013 22:35

Цитата:

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

Пример в студию тебя не понимают.

let fn = () => {
    1
}


Проверить можно уже в FF и Traceur, что 1 не вернется, а return {1} приведет к ошибке.

cyber 28.11.2013 22:40

Оставлю это тут может кому пригодиться.
https://github.com/cyberua/gallery_course_work/
https://drive.google.com/folderview?...&usp=sha ring

Maxmaxmaximus3 28.11.2013 23:13

Цитата:

Сообщение от monolithed
Пример в студию тебя не понимают.

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

не забываем что тут 1-3 человека включая меня которые знают как устроен яваскрипт, остальные нубы нубами. так что не удивительно что вы не понимаете о чем я.

var block = eval('{1+2; 3+5;}')
alert(block)



Цитата:

Сообщение от monolithed
return {1} приведет к ошибке.



ВОЗМОЖНО ПО ЭТОМУ я поднял вопрос как синтаксически грамотно вывести блок не используя ивал, использовать ухищрения парсера яваскрипта чтобы заставить его вернуть значение блока????


п.с. к слову arr.1 тоже ошибка будет, но это не значит что там нет ключа 1, это значит что парсер не может распознять такую конструкцию, то же и с блоками, return ожидает немного другое.

Цитата:

Сообщение от kobezzza
Заменяет строки, комменты и регулярные выражения на __ESCAPER_QUOT__номер_ , чтобы удобней было парсить, а потом сделать обратную замену.

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

monolithed 28.11.2013 23:29

Цитата:

Сообщение от Maxmaxmaximus3
не забываем что тут 1-3 человека включая меня которые знают как устроен яваскрипт, остальные нубы нубами. так что не удивительно что вы не понимаете о чем я.

var block = eval('{1+2; 3+5;}')
alert(block)

Какое отношение этот школьный пример имеет к твоему вопросу?

function name(){

  {
    2+3;
    5+1;
  }

}


Цитата:

Сообщение от Maxmaxmaximus3
в будущих версиях экмы, и функции так будут делать

Как так, кроме тебя еще кто-нибудь об этом знает?

Maxmaxmaximus3 28.11.2013 23:34

Цитата:

Сообщение от monolithed
Какое отношение этот пример имеет к твоему вопросу?

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

monolithed 28.11.2013 23:41

Цитата:

Сообщение от Maxmaxmaximus3
ВОЗМОЖНО ПО ЭТОМУ я поднял вопрос как синтаксически грамотно вывести блок не используя ивал, использовать ухищрения парсера яваскрипта чтобы заставить его вернуть значение блока????

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


{
  var a = 1;
}

alert(a); // 1


В ES6 добавится блочная область видимости:


{
   let a = 1;
}

alert(a); // ReferenceError

Maxmaxmaximus3 29.11.2013 00:06

monolithed, так, давай другой пример,

function (){
2+2;
4+3;
}


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

иными словами я из

function (){
2+2;
4+3;
}


хочу сделать

function () {
return {
2+2;
4+3;
}

}

Почему не ивал? Потому что я хочу составить такой код функции который бы реализовывал такое поведение, и я бы создал из него новую функцию new Function('code'); и она работала бы с нативной скоростью.


И это решение просто красивое, разумеется если нет способа, то придется парсить код функции и искать последнее выражение и перед ним рисовать return.

monolithed 29.11.2013 00:14

Цитата:

Сообщение от Maxmaxmaximus3
я хочу вырезать тело функции и использовать его как блок

К чему весь это бред?

Используй Perl

Цитата:

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

А может и не возвращать:
foo: {
    var a = 0;

    break foo;

    var a = 1;
}

alert(a) //0


:)


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