Это плохая практика, чтобы вернуться из блока try catch catch finally?

Каждая функция контекста выполнения в javascript имеет контекст контекста этот параметр , который задается:

  1. Как вызывается функция ( в том числе в качестве метода объекта, использование call и применяется , использование new )
  2. Использование связывания
  3. Лексически для функций стрелок (они принимают этот своего внешнего контекста выполнения)

Каким бы ни был этот контекст области видимости, ссылается на «this».

Вы можете изменить это значение для параметра этого контекста области , используя func.call, func.apply или func.bind.

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

jQuery делает это тривиальным для изменения с помощью jQuery.proxy.

126
задан Luke Girvin 20 October 2013 в 15:57
поделиться

6 ответов

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

164
ответ дан Mehrdad Afshari 20 October 2013 в 15:57
поделиться
  • 1
    lv не доступен внутренний onItemClick. What' s хороший способ обойти это? – shinjin 9 April 2014 в 04:47

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

18
ответ дан Nicolas R 20 October 2013 в 15:57
поделиться
  • 1
    @shinjin Делают его окончательным. final ListView lv = (ListView) findViewById(R.id.your_list_view); – Lekensteyn 5 June 2014 в 10:15

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

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

Таким образом, я расположил бы код так, чтобы оператор возврата всегда появился после наконец операторы.

14
ответ дан Conrad 20 October 2013 в 15:57
поделиться

Это может ответить на Ваш вопрос

, Что действительно происходит в попытке {возвращают x;} наконец {x = пустой указатель;} оператор?

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

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

9
ответ дан Community 20 October 2013 в 15:57
поделиться

Функционально нет никакого различия.

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

4
ответ дан Ifeanyi Echeruo 20 October 2013 в 15:57
поделиться
  • 1
    спасибо Vijay, на котором у меня есть сталкивающаяся проблема щелчка, расширяет представление, которое я имею, решает из Вашего ответа – dhaiwat 18 November 2010 в 21:37

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

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

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

3
ответ дан BeWarned 20 October 2013 в 15:57
поделиться
  • 1
    Но этот doesn' t определяют, какой объект нажимается, который делает его более или менее бесполезным для списка? Корректный? – farm ostrich 21 May 2011 в 10:55
Другие вопросы по тегам:

Похожие вопросы: