Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос
dastiw1

Дастан

Frontend Developer
  • 0
    вклад
  • 14
    вопросов
  • 6
    ответов
  • 0%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Достижения
  • Что такое замыкание?

    iCoderXXI
    Андрей @iCoderXXI
    React.JS/FrontEnd engineer
    В целом ты все верно понял. Почитал я тут ответы, термины, термины, термины...

    Я люблю простые объяснения, буквально на пальцах.

    Вот ты вызвал функцию, в ней создаются переменные локальной области видимости, т.е. доступные только самой функции. Под эти переменные движок JavaScript выделяет память.

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

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

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

    Один из основных паттернов, для которых применяются замыкания - ограничение доступа к данным, их изоляция (ограничение их области видимости).

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

    В ответах есть пример со счетчиком, который наглядно демонстрирует этот принцип.
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Как убрать shop и product-categoty из URL Woocommerce?

    wppanda5
    WP Panda @wppanda5 Куратор тега WordPress
    WordPress Mедведь
    Вообще сильно не рекомендуют https://docs.woocommerce.com/document/removing-pro...

    Но если оооочень хочется, то действуйте.
    /**
    	 * Для термина  - product_cat
    	 */
    	add_filter( 'request', 'change_requerst_vars_for_product_cat' );
    	add_filter( 'term_link', 'term_link_filter', 10, 3 );
    
    	/**
    	 * Для типа постов - product
    	 */
    	add_filter( 'post_type_link', 'wpp_remove_slug', 10, 3 );
    	add_action( 'pre_get_posts', 'wpp_change_request' );
    
    	function change_requerst_vars_for_product_cat($vars) {
    
    		global $wpdb;
    		if ( ! empty( $vars[ 'pagename' ] ) || ! empty( $vars[ 'category_name' ] ) || ! empty( $vars[ 'name' ] ) || ! empty( $vars[ 'attachment' ] ) ) {
    			$slug   = ! empty( $vars[ 'pagename' ] ) ? $vars[ 'pagename' ] : ( ! empty( $vars[ 'name' ] ) ? $vars[ 'name' ] : ( ! empty( $vars[ 'category_name' ] ) ? $vars[ 'category_name' ] : $vars[ 'attachment' ] ) );
    			$exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s", array( $slug ) ) );
    			if ( $exists ) {
    				$old_vars = $vars;
    				$vars     = array( 'product_cat' => $slug );
    				if ( ! empty( $old_vars[ 'paged' ] ) || ! empty( $old_vars[ 'page' ] ) ) {
    					$vars[ 'paged' ] = ! empty( $old_vars[ 'paged' ] ) ? $old_vars[ 'paged' ] : $old_vars[ 'page' ];
    				}
    				if ( ! empty( $old_vars[ 'orderby' ] ) ) {
    					$vars[ 'orderby' ] = $old_vars[ 'orderby' ];
    				}
    				if ( ! empty( $old_vars[ 'order' ] ) ) {
    					$vars[ 'order' ] = $old_vars[ 'order' ];
    				}
    			}
    		}
    
    		return $vars;
    
    	}
    	
    	function term_link_filter( $url, $term, $taxonomy ) {
    
    		$url = str_replace( "/product-category/", "/", $url );
    		return $url;
    
    	}
    
    	function wpp_remove_slug( $post_link, $post, $name ) {
    
    		if ( 'product' != $post->post_type || 'publish' != $post->post_status ) {
    			return $post_link;
    		}
    		$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
    
    		return $post_link;
    
    	}
    
    	function wpp_change_request( $query ) {
    
    		if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query[ 'page' ] ) ) {
    			return;
    		}
    		if ( ! empty( $query->query[ 'name' ] ) ) {
    			$query->set( 'post_type', array( 'post', 'product', 'page' ) );
    		}
    
    	}
    Ответ написан более трёх лет назад
    11 комментариев
    11 комментариев
  • Почему на айфоне не работает клик по ссылкам?

    Михаил Чирский @chirskiy_mixail
    Очень давно занимаюсь версткой, имею огромный опыт
    Использовать Modernizr, в стилях
    .no-touch .element:hover {}
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как сделать смену языка на сайте через поддомен?

    Fqyeh29
    Ainur Shakirov @Fqyeh29
    ↓ ИМХО ↓
    Ну, при клике на site.ru/videos?lang=english прописывать в куки что у пользователя инглиш язык.
    И при обращений к сайту, читать куки и перенаправлять на en.site.ru/videos если в куках инглиш.
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Как изменить формат даты в массивe с помощью angular?

    Medgat @Medgat
    Я делаю так через ng-repeat
    {{data_grafics.dateStart | date : 'dd.MM.yyyy HH:mm'}}
    Если, это не правильный вариант буду ждать комментарий
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Как лучше реализовать точки на CSS?

    Zoxon
    Константин Величко @Zoxon
    Веб-разработчик
    Как в яндекс маркте https://market.yandex.ru/product/13116386/spec?hid...
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Часто ли используют Bootstrap в работе?

    webirus
    Сергей Горячев @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    У нас небольшая студия, но мы в команде договорились просто.
    НЕ использовать Бутстрап для сайтов, лендингов, магазинов.
    Единственное, где допускаем - это админ-панель.
    Я всегда говорю, Бутстрап - это отличный фреймворк, который придумали ленивые программисты, которые не умею верстать.
    Так оно и есть. Его можно использовать, но не повсеместно.
    Сайты проще даже верстать без него.
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
  • Как настроить nginx фронтендом?

    BuriK666
    Андрей Буров @BuriK666 Куратор тега Nginx
    Компьютерный псих
    proxy_pass 127.0.0.1:8080;
    Без слеша на конце
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Можно ли активировать Windows 10 ключом от Win8?

    insiki
    O Di @insiki
    broken pipe
    10ку ключом от 8ки не активируешь, но, обновившись до 10, выдергиваешь ключ утилитой (например этой), сохраняешь куда-нибудь, и всё ок.
    Ответ написан более трёх лет назад
    4 комментария
    4 комментария
  • Слайдер, который выводить все картинки из определенной папки?

    SilenceOfWinter
    Антон Шаманов @SilenceOfWinter
    та еще зажигалка...
    js не умеет работать с файловой системой
    Ответ написан более трёх лет назад
    6 комментариев
    6 комментариев
  • Можно ли активировать Windows 10 ключом от Win8?

    xez
    Dmitry Roo @xez
    Senior Junior Roo
    Я по этому поводу общался с техподдержкой MS, и вам рекомендую: в формате онлайн чата вопрос решился за 15 минут.
    Проблема была похожая : на ноуте стояла 8.1 (ключ вшит в биос); установил ssd - сразу поставил win 10 - она не активировалась. Причина была - неправильная редакция. Нужно было установить "windows 10 Home для одного языка".
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Не правильно работает owlcarousel, что делать??

    FoxPro111
    Юрий Олиярнык @FoxPro111
    .owl-carousel .owl-stage-outer {
    overflow: hidden;
    }
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Web/PhpStorm периодически "теряет" буфер обмена... как пофиксить?

    BOOMER_74
    Сергей Новиков @BOOMER_74
    Web-разработчик
    Это известный баг всей платформы. Пока решения нет. К сожалению у него нормальный приоритет, придется долго ждать фикса (репорту уже полгода).
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Как с наименьшими усилиями сделать версию сайта для слабовидящих?

    Nekto_Habr
    Нерон Лордов @Nekto_Habr
    Чат дизайнеров: https://t.me/figma_life
    Если в кратчайшие сроки нужно - прикрутите попап, выскакивающий при загрузке страницы, который обучит пользоваться масштабированием в браузере (ctrl + колесо мыши)
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • На angular изображения не отображаюстя при первом заходе на сайт. Как быть?

    Николай @healqq
    У вас скорее всего не указано значение currentLng по умолчанию. Т.к. на всех трёх div'ах стоит ng-hide.
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Сайт не открывает извне, порт 80. Сервер apach2+nginx (VestaCP) В каком направлении копать?

    Azazel PW @azazelpw
    Linux SA
    Chain INPUT (policy DROP)
    У вас по моему пакеты дропаются :)
    напишите
    iptables -S увидите правило
    потом напишите
    iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
    И у вас откроется 80 порт.
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Полноценное использование flexbox?

    andykov
    Андрей Б. @andykov
    Shit happens
    Уже обсуждалось
    Cтоит начинать использовать flexbox?
    Как использовать flexbox на реальных проектах?

    А стоило всего лишь набрать "flexbox" в поиске тостера, лентяи
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Какой PHP фреймворк выбрать для CRM/ERP?

    mzcoding
    Станислав @mzcoding
    Web-Разработка
    Если программируете на Yii оставайтесь на Yii)) Как ни странно, многим разработчикам пишущим на yii достаточно сложно перейти на laravel и наоборот :)
    Ответ написан более трёх лет назад
    Комментировать
    Комментировать
  • Почему субдомен не открывается если ты его сперва открыл в браузере а потом только создал и снова открыл?

    bk0011m
    Сергей @bk0011m
    Системный администратор
    Ну вы не все почистили. Например браузер тоже "помнит" ваши предыдущие запросы.
    Далее нужно чистить кэш еще и на вашем ДНС сервере, который у вас в сетевых настройках прописан. Иначе он выдаст то что выдавал ранее.
    Если вам нужно что-то часто создавать и удалять, лучше правьте hosts
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
  • Callback если пользователь поделился страницей (vk, fb, od, tw)?

    Алексей Кричко @sand_alkr
    инженер-программист
    C vk все даже проще, чем с fb:

    <head>
    ...
    <script type="text/javascript" src="//vk.com/js/api/openapi.js?113"></script>
    <script type="text/javascript">
    	VK.init({apiId: ваш_appId, onlyWidgets: true});
    </script>
    </head>
    <body>
    ...
    <div id="vk_like"></div>
    <script type="text/javascript">
    	VK.Widgets.Like("vk_like", {type: "button"});
    	VK.Observer.subscribe("widgets.like.shared", function f() {
    		alert('Молодец!');
    	});
    </script>
    Ответ написан более трёх лет назад
    2 комментария
    2 комментария
Оценили как «Нравится»
Самые активные сегодня
  • Drno
    • 9 ответов
    • 0 вопросов
  • Rsa97
    Rsa97
    • 7 ответов
    • 0 вопросов
  • GNUBack
    • 6 ответов
    • 0 вопросов
  • dimonchik2013
    Dimonchik
    • 6 ответов
    • 0 вопросов
  • an
    • 1 ответ
    • 4 вопроса
  • fearzzzz
    FearZzZz
    • 5 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации