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)

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


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