Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Объясните пожалуйста конструкцию (https://javascript.ru/forum/misc/57032-obyasnite-pozhalujjsta-konstrukciyu.html)

Urfin 16.07.2015 00:57

Объясните пожалуйста конструкцию
 
Что вернет функция, если она имеет такую конструкцию:

function a(e){
........
    return b,
    c,
    d
}


То есть, если возвращаемые значения указаны через запятую, что она вернет? Столкнулся с такой конструкцией первый раз.

Вот полный пример такой функции:

function getHref(e) {
    if (!e) return !1;
    var t = !1;
    return e.getAttribute && (t = e.getAttribute("data-href") || e.getAttribute("href")),
    t || (e.pathname ? t = e.pathname + e.search + e.hash : tag(e) || (t = e)),
    t || !1
}

Decode 16.07.2015 01:14

Цитата:

Сообщение от Urfin
Что вернет функция, если она имеет такую конструкцию:

function a(e){
........
    return b,
    c,
    d
}


То есть, если возвращаемые значения указаны через запятую, что она вернет?

Вернет последнее, т.е. d.

Т.к. запятая выполняет оба операнда (слева направо) и возвращает значение второго оператора.

Т.е. сначала запятая отбросит b и вернет c, затем отбросит с и вернет d;

Urfin 16.07.2015 01:32

Цитата:

Сообщение от Decode
Вернет последнее, т.е. d.

Т.к. запятая выполняет оба операнда (слева направо) и возвращает значение второго оператора.

Т.е. сначала запятая отбросит b и вернет c, затем отбросит с и вернет d;

Хм, спасибо, интересно.
А какой смысл в такой конструкции?
Тогда логичнее наверно писать:
function(){
    ...
    b,
    c;
return d
}


Цитата:

Сообщение от Decode
Urfin, только в вашем примере используется логическое ИЛИ.

И что это значит?

Decode 16.07.2015 01:37

Urfin, может имеет смысл учебник прочитать? Про запятую вот хорошая статья — http://habrahabr.ru/post/116827/

Urfin 16.07.2015 01:44

Decode, ок, спасибо. Искал здесь в справочнике, ответа не нашел, буду читать учебник.
Но суть я пока не понял что делает эта функция.

Urfin 16.07.2015 02:03

Decode спасибо за ссылку.
Все понял, разобрался.

Decode 16.07.2015 02:27

Urfin, вам еще таблица приоритетов операторов понадобиться.

kostyanet 16.07.2015 08:14

Цитата:

Сообщение от Urfin
Вот полный пример такой функции:

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

Короче слышали фразу "свистелки и перделки" - оно самое.

Urfin 16.07.2015 16:12

Цитата:

Сообщение от kostyanet (Сообщение 379933)
Есть особый класс чиканутых программистов, которые не могут избежать острого чувства самовыражения и пишут вот такие полные ярких моментов жизни примеры функций.

Короче слышали фразу "свистелки и перделки" - оно самое.

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

kostyanet 16.07.2015 16:26

Во-во, не удивлюсь что программистами там пашуть волонтеры с того же самого вконтакта, то есть сами на тех же веществах, откуда и стиль.

Цитата:

Сообщение от Urfin
работает очень не плохо.

Вы что, измерения проводили? Сравнительные характеристики? Не важно. Важно знать что брать пример надо с вменяемых людей, а не с вконтактовских хуйдожников.

Потому что грядет байткод - покайтесь!

kostyanet 16.07.2015 17:15

Квази-рациональное объяснение что !1 занимает ажно в два раза меньше места чем false рушится об null по умолчанию.

Urfin 16.07.2015 17:31

Цитата:

Сообщение от kostyanet (Сообщение 380020)
Квази-рациональное объяснение что !1 занимает ажно в два раза меньше места чем false рушится об null по умолчанию.

!1 и !0 в код вставляет обфускатор.
Функция в заглав посте после деобфускатора так выглядит.
Тот же jquery.min точно такие же конструкции содержит.

Так что в реале код наверно более читабелен и содержит true и false как и полагается.

kostyanet 16.07.2015 18:25

Это не обфускатор, а минимайзер. У меня такой есть, ничего он там не трогает. Обфускатор был бы заметен вообще тотально и фундаментально. Не надо выгораживать хуйдожников - их обидеть может каждый и я не погнушаюсь :)

Urfin 16.07.2015 23:24

Цитата:

Сообщение от kostyanet
Это не обфускатор, а минимайзер. У меня такой есть, ничего он там не трогает. Обфускатор был бы заметен вообще тотально и фундаментально. Не надо выгораживать хуйдожников


Вот как выглядят функции в jquery.min.js и в jquery.js для сравнения.

isPlainObject: function (a) {
	return "object" !== n.type(a) || a.nodeType || n.isWindow(a) ? !1 : a.constructor && !j.call(a.constructor.prototype, "isPrototypeOf") ? !1 : !0
},
isEmptyObject: function (a) {
	var b;
	for (b in a) return !1;
	return !0
},
type: function (a) {
	return null == a ? a + "" : "object" == typeof a || "function" == typeof a ? h[i.call(a)] || "object" : typeof a
},


isPlainObject: function( obj ) {
	// Not plain objects:
	// - Any object or value whose internal [[Class]] property is not "[object Object]"
	// - DOM nodes
	// - window
	if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
		return false;
	}

	if ( obj.constructor &&
			!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
		return false;
	}

	// If the function hasn't returned already, we're confident that
	// |obj| is a plain object, created by {} or constructed with new Object
	return true;
},

isEmptyObject: function( obj ) {
	var name;
	for ( name in obj ) {
		return false;
	}
	return true;
},

type: function( obj ) {
	if ( obj == null ) {
		return obj + "";
	}
	// Support: Android<4.0, iOS<6 (functionish RegExp)
	return typeof obj === "object" || typeof obj === "function" ?
		class2type[ toString.call(obj) ] || "object" :
		typeof obj;
},


Так что в реальном виде скрипт точно хорошо читаем и у контакта тоже.
Художеств в код добавляет минимайзер, который оптимизирует как условные выражения, так и переменные и true, false.

kostyanet 17.07.2015 06:15

Цитата:

Сообщение от Urfin
Вот как выглядят функции в jquery.min.js и в jquery.js для сравнения.


Забираю свой наезд. Не знал.

Ну то есть я знал про обфускаторы, но было такое мнение подтвержденное некоторыми примерами, что они городят бред несусветный. А тут все даже по-человечески остается, и более художественно.

Значит хуйдожники - авторы обфускатора. :)

Кстати, а где можно скачать такой? Или он как та гуглевая платформа для дизайн-тайм интегрирован с жикверей?

kostyanet 17.07.2015 10:19

Цитата:

Сообщение от Rise
Closure Compiler Service


Суровые там правила:

Цитата:

JSC_WRONG_ARGUMENT_COUNT: Function parseInt: called with 1 argument(s). Function requires at least 2 argument(s) and no more than 2 argument(s). at line 18 character 8
return parseInt(v).toFixed(0).replace(/\d(?=(\d{3})+$)/g, '$& ')+c;

===

Нет, я имел ввиду скачать, то есть на комп, на php лучше, чтоб сразу все обновлялось.


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