Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как часто вы используете qq && qq() (https://javascript.ru/forum/misc/24774-kak-chasto-vy-ispolzuete-qq-qq.html)

Gozar 14.01.2012 14:03

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150471)
return func && func()
означают проверить существование функции, если существует, то вызвать, и вернуть тру или фолс.

Это подмена понятий, если читать код, то получается:
Вернуть func и вызвать func

, а вот существование func явно не проверяется(не указано).

если пойти дальше и сделать понятнее то получиться:
return (func && func());

а это вообще плохо по читабельности.

Gozar 14.01.2012 14:06

Одним словом, читай выше для чего придумали фигурные скобки.

Livaanderiamarum 14.01.2012 14:11

Цитата:

Сообщение от Gozar (Сообщение 150482)
Это подмена понятий, если читать код, то получается:
Вернуть func и вызвать func
http://apachan.net/pic/i1lzmtrn15hc.html

если читать код и НЕ БЫТЬ ТУПЫМ НУБОМ то код читается по приоритетности операторов.


любой более менее сведающий человек понимает такую конструкция как "проверить функцию и вызвать" потому что этой краткой записи 200 лет.
я тебе на твоем языке оьбясню: НАДО ЗАПОМНИТЬ этот приём. тогда твои глазоньки когда будут это видеть то будут понимать что тут. запомнить так же, как ты запомнил фигурные скобки.

monolithed 14.01.2012 14:31

Очем вы говорите, какая проверка функции (bar && bar())? :-/
var foo = function() {
    return bar && bar(); //error: Undefined variable: bar
};

// анализ кода приостановлен!
alert(foo());
alert(1);


Вариант лучше, вернется undefined и анализ кода продолжится:
var foo = function() {
    if (typeof bar !== 'undefined') 
        return bar();
};

alert(foo()); //undefined
alert(1); //1


Если уж хотите использовать этот оператор для проверки функции, то только так (вернется булево значение):

var foo = function() {
    return typeof bar !== 'undefined' && bar();
};

alert(foo()); //0
alert(1); //1


Переменная всегда всегда должна быть объявлена или инициализирована:
var i;
alert(i && i);
alert(1);

var i = 0;
alert(i && i);
alert(1);

Иными словами, если переменная не объявлена и используется в к.л. выражении это приводит к ошибке парсинга и дальнейший анализ кода не производится!
Поэтому перед тем как применять оператор && убедитесь, что переменная или функция объявлены и доступны в текущем скопе области видимости.

Livaanderiamarum 14.01.2012 15:15

вы я смотрю совсем не знаете в каких случаях и когда и ЗАЧЕМ используется эта конструкция))? пишете мне тут очевидныве вещи) хотя сами не понимаете зачем))

Это как пытаться обезьне дать гранату, это как пытаться древнего человека айфоном пользоваться научить, а он будет тебе говорить "айфон плохой! айфон орехи не колоть! а если колоть то ломаться!" - это очевидно!, древний человек)!

:)

Особенно не понял как работает эта конструкция товарищ monolithed)) и я говорю ему: - это очевидно!, древний человек)!

я привел пример где люди используют подобную конструкцию(4 стр) :) я создал топик для того чтобы узнать у кого какие еще подобные сахарные приемчики есть)? То что вы этот не знали, это хрен с ним) не умеете пользоваться не пользуйтесь, хватит её обсуждать тогда) и своё её не понимание. Создайте отдельную тему для этого)!

Какие кто еще приемы интересные знает?

Gozar 14.01.2012 15:20

Цитата:

Сообщение от monolithed (Сообщение 150489)
Переменная всегда всегда должна быть объявлена или инициализирована

Ну мы обсуждали код всеумного и почитаемого в интернетах товарища, у него она выше объявлена:

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150389)
var imagesContainer = {},
	// ...
	callback;

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

Так что вроде мы о том говорим.

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

Gozar 14.01.2012 15:30

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150498)
То что вы этот не знали, это хрен с ним) не умеете пользоваться не пользуйтесь, хватит её обсуждать тогда) и своё её не понимание.

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

Какой ты молодец. Может тебе ноги начать целовать?

Gozar 14.01.2012 15:31

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150498)
Какие кто еще приемы интересные знает?

Я знаю один прием, кия, - иди в жопу!

Livaanderiamarum 14.01.2012 15:39


Gozar 14.01.2012 15:49

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150505)

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

monolithed 14.01.2012 15:53

Цитата:

Сообщение от Gozar
Ну мы обсуждали код всеумного и почитаемого в интернетах товарища, у него она выше объявлена:

Не обратил на эту портянку внимание.
Просто я видел в некоторых библиотеках такую проверку на наличие колбека, что просто п*ц.
Цитата:

Сообщение от Livaanderiamarum

Цитата:

Сообщение от Livaanderiamarum
То что вы этот не знали, это хрен с ним

:lol:
Особенно не понял как работает эта конструкция товарищ monolithed)) и я говорю ему: - это очевидно!, древний человек)!

Продолжить традицию бана на день за троллинг и оскорбление?

Livaanderiamarum 14.01.2012 15:55

как я тебя оскорбил?

Gozar 14.01.2012 15:56

Цитата:

Сообщение от Livaanderiamarum (Сообщение 150514)
как я тебя оскорбил?

А я что уже не в счёт?!

:cray:

monolithed 14.01.2012 15:58

Цитата:

Сообщение от Livaanderiamarum
как я тебя оскорбил?

Все твои посты пропитаны оскорблением других участников

Livaanderiamarum 14.01.2012 16:03

Цитата:

Сообщение от monolithed (Сообщение 150517)
Твои посты все пропитаны оскорблением других участников

А, ну тогда больше не буду. Как мне поступать если ко мне начнут поступать посты пропитаные оскорблениями от других учстников? Посылать посты пропитаные ненавистью в ответ или как то иначе?

monolithed 14.01.2012 16:13

Цитата:

Сообщение от Livaanderiamarum
Как мне поступать если ко мне начнут поступать посты пропитаные оскорблениями от других учстников?

Не создавать каждые пять минут новую тему с очевидным ответом и тем более не оскорблять тех кто тебе помогает.
Цитата:

Сообщение от Livaanderiamarum
Посылать посты пропитаные ненавистью в ответ или как то иначе?

Тихо-молча игнорировать и не создавать условий для троллинга

FINoM 14.01.2012 16:21

Цитата:

Сообщение от monolithed
Очем вы говорите, какая проверка функции (bar && bar())?

var foo = function() {
    return bar && bar(); //error: Undefined variable: bar
};

Предполагается, что bar объявлен. Например:
function( callback ) {
    callback && callback();
}

monolithed 14.01.2012 16:24

Цитата:

Сообщение от FINoM
Предполагается, что bar объявлен.

Цитата:

Сообщение от monolithed
Не обратил на эту портянку внимание.

В любом случае это не очевидно, тем более если объявление где-то в дебрях.

FINoM 14.01.2012 16:43

Цитата:

Сообщение от monolithed
В любом случае это не очевидно, тем более если объявление где-то в дебрях.

Я бы сразу понял, что к чему.

Gozar 14.01.2012 16:59

Цитата:

Сообщение от FINoM (Сообщение 150533)
Я бы сразу понял, что к чему.

Ну не знаю, может ТС прав и нужно всегда писать так:

selector = ( ret.cacheable ? $.clone(ret.fragment) : ret.fragment ).childNodes

return elem.nodeType === 1 && elem.getAttribute("id") === match;

Но мне почему-то так писать не всегда хочется.


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