JavaScript без этого, никогда не будет понятен. Хотите ясности?

Хизри у вас полный доступ к сайту.

вт, 30 мар. 2021 г. в 23:55, Khizri Tataev

Ценю Вашу лабораторию мысли и время, потраченное на создание контента для нас, благодарных учеников.

--

Хизри, рекомендация, как сделать.

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

начните вот с функций питон:

https://spb-tut.ru/%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB-%D1%81-%D0%BD%D1%83%D0%BB%D1%8F/%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8B/%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB-python-kotlin-js-%D1%81-%D0%BD%D1%83%D0%BB%D1%8F/function-how-to/category/function-how-to/

Потом будут функции котлин и потом js.

Дело вот в чём здесь. Js язык в котором можно все, но все работает или работает как ему нужно, а не вам.

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

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

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

А вот в js, там конечно все по иному. На самом деле нет.

все таки разработчики учли моменты.

Если вы хорошо будете знать классические вещи, то вы подметите, что js

в этом случае param1, param2 передаются по очереди все же слева на право.

function myfan (param1, param2){}

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

function myfan (param1="какое то значение", param2){}

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

А Js это будет работать, но не так вы ожидаете.

Я обратил на это внимание, потому что на сайте они написали mdn мозилла они два года искали ошибку вот за такой херни. А ведь такое написал человек. который точно знал точно js.

Вывод.

У вас в голове должна быть система, относительно которой вы будете понимать как что и где работает.

Я рекомендую брать классические вещи. Это вам поможет.

В этом случае такой код вы точно не напишите, хотя бы не проверив.

// где именованный параметр впереди параметра без имени. JS то отработает по одной просто причине, что внутри языка по умолчанию, если мы ничего не присвоим, то все равно язык сам присвоит undefaind (не определено). Сделано это для того, что бы не падали браузеры, а так да мы не получим чего хотим, но программа продолжит работу (любая).

function myfan (param1="какое то значение", param2){}

Я уверен на все сто, вы напишите такой код:

// параметры только без имени. Самое интересное, что тогда js работает ожидаемо, то есть значения передаются слева на право по очереди. Учтите в js не понятия позиционные.

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

function myfan (param1, param2){}

Или вы напишите такой код, когда первый без имени, а далее все с именем, тогда тоже все будет ожидаемо в js. Если начали писать с именем, то после них не ставьте без имени, ожидаемость пропадёт

function myfan (param1, param2="c именем", param3 ="с именем"){}

и др варианты, сами уже выведите.

Вывод.

Функция в js это основная единица построения программ, в классе так же работают все правила функции + ооп. Если мы хотим писать уверено то порядок начинается именно с функций в голове. Выйти на профессиональный уровень - это значит прежде чем написать, знать что выдаст.

Важно изучить и понимать:

Ещё важно учесть, что функции в js конкретно зщаточены под две парадигмы и они легли в основу языка в полном объёме:

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

https://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8_%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0

  1. Парадигма:

Фу́нкция вы́сшего поря́дка — в программировании функция, принимающая в качестве аргументов другие функции или возвращающая другую функцию в качестве результата. Основная идея состоит в том, что функции имеют тот же статус, что и другие объекты данных. Использование функций высшего порядка приводит к абстрактным и компактным программам, принимая во внимание сложность производимых ими вычислений.

В js:

передавать как аргумент и возвращать в качестве результата при вызове других функций (функций высшего порядка);

  • создавать анонимно и присваивать в качестве значений переменных или свойств объектов.

Как задумывался JS?

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

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

И здесь в js начинается главное, нужно понять, а под каким углом изучать язык.

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

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

Подвиг меня к этому один разработчик, его цитата внизу. Я тоже не без греха, много времени считал, что контекст и область видимости почти одно и то же. А ведь именно это понимание делаем js работающим ожидаемо. И здесь есть у js чёткая система.

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

И здесь начинаем наводить порядок с того, что начинаем разделать область видимости и контекст.

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

В уроках мы разберём и расставим по своим местам:

И увидим, что каждый вызов функции имеет свою область видимости и связанный с ним контекст.

Нам нужно понять природу и уяснить на примерах, что область видимости её корнем являются функции и относительно функций мы можем понимать. В то время. как контекст основан на объектах. Пока сложно понимается потому что нет примеров, так как цель этой статьи обратить внимание и понять куда двигаться.

Но объясню пока немного проще:

Область видимости относится к доступу к какой то переменной(любой), в том числе переменной в функции или за её пределами.

В Js все что за пределами функции является глобальной областью видимости. Но это ещё не все. Правильно будет звучать так. Область видимости относится к доступу к какой то переменной(любой), при её вызове и она уникальна для каждого вызова. Реализация js 2015 все дело упростила, там разделы области видимости ключевыми словами let, var, const, но есть ещё и другие области. нам нужно с ними разобраться.

Вывод. Область видимости это доступ к переменным.

А что же такое контекст?

А что же такое контекст, а контекст это всегда, всегда, значение ключевого слова this, что делает this, оно вызывает переменную там где указано на лету. И this всегда является ссылкой на объект.

Ага, вот появилось новое понятие, ссылка на объект, то же изучаем в уроках, так как без этого не будем понимать как к чему получить доступ. И там ещё есть по миниму 12 концепций без которых писать не получится грамотно.

Вывод.

Контекст - это всегда значение ключевого слова this. так в чём же здесь разбираться.

Справка. This в js пришёл из Java, вот видео, как он себя ведёт в java, в js ведёт совсем по другому:

  1. This пришёл в Js из Java, а как он работает в Java?

https://www.youtube.com/watch?v=QXHJ3u8CWYg&t=1013s

А разбираться нужно в том, что this, всегда ссылается на текущий объект, а вот что в данный момент считается текущим объектом - это и есть узел в которому нужно разбираться. Именно здесь js может выдавать все что угодно, если мы не понимаем.

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

И ещё без него трудно работать в ООП.

Итак мы учитываем области видимости и учитываем контекст, но все равно видим, что что то не то. Что вы не учли?

И здесь человек. который пришёл с классических языков начинает офигевать, что что то не то.

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

Ведь в нормальном классическом языке нельзя сначала вызвать переменную, а потом объявить, а в js можно.

То есть переменные всплывают в вверх. Конечно в коде они остаются на том же месте, а в память попадают раньше до выполнения на фазе компиляции, да JS, язык с динамической типизацией. но он и компилируется движком, а то что уже собрано можно использовать ,именно поэтому так как сначала идёт фаза компиляции, а потом выполнения, поэтому мы можем переменные сразу использовать до объявления, то есть выше в коде сначала использовать, а ниже объявить. (ни чего не напутано, язык интерпретирует, а движок компилирует код)

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

Вывод.

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

Путь открыт.

А вот с этого момента можно работать с типами данных, можно начинать ООП JS, можно работать с Node и фреймворками.

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

Теперь можно тренироваться и ясность будет с каждой тренировкой все чище и чище.

Наконец-то js нам становится понятным.

А вот слова этого разработчика.

Эти уроки будут здесь на днях, подвиг меня к этому один разработчик Район Морр.

https://spb-tut.ru/%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB-%D1%81-%D0%BD%D1%83%D0%BB%D1%8F/%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8B/%D0%BF%D0%BE%D0%B4%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB-python-kotlin-js-%D1%81-%D0%BD%D1%83%D0%BB%D1%8F/%D0%B2%D1%85%D0%BE%D0%B4-%D0%B2-%D1%8F%D0%B7%D1%8B%D0%BA/category/function-js/

Не менее важную деталь помог увидеть

Sergey Moskalenko за замеченные ошибки. https://www.youtube.com/channel/UCdxO8eyRw1rDDpKtJGLAdBg/featured, он обратил моё внимание именно на понятие текущий. В принципе я понимал, но рассказывая говорил одно, а под этим имел иное. Теперь все стало на места и рассказывать буду и что за этим стоит, будет в одной плоскости.

Первое, что необходимо прояснить, - это то, что контекст и область видимости не совпадают.

Я заметил, что многие разработчики на протяжении многих лет часто путают эти два термина (включая меня)

Что важно сделать ещё.

Посмотрите видео в ней шаблон, важно выработать систему отработки кода, в школе этому уделено много внимания. Если у вас будет система, вы точно ничегно не упустите и как гребные винты корабля она вас всегда будет держать на плаву.

250 строк кода в Jupyter Lab в день и вы профессионал в Python, Kotlin, Js.

https://www.youtube.com/watch?v=pvUf_Qi3IK4

Понимание JavaScript на практике может только с Node.js, так как это низкоуровневая библиотека и вынуждены писать код и принимать решения постоянно по области видимости и по контексту на практике. За то когда после Noda вы перейдёте к приложениям на стороне клиента, для вас js будет как прозрачный и приятный язык. Так как бытует мнение, что а зачем изучать js, достаточно знать JQuery, отчасти это верно, только вот постоянное копание с кодом, пишем код и ожидаем одно, а он выдаёт другое. Или в приложениях на стороне клиента. отменили законы функций JS. В том и дело, что нет. Node для вас проявит Js раз и навсегда и будет вам большой бонус. Вы сможете писать мощные приложения, такие как сайты, сервисы любые работающие в реальном времени, боты, мобильные приложения с серверной частью, как Инстаграм (там серверная часть на Питон Джанго), а так же декстопные приложения, например VS Studio code написана на Node.js (чувствуете мощь?). В школе есть раздел работы с Node.js и ооп js.

Хотите учится эффективнее и сэкономить время, подключайтесь к школе:

https://spb-tut.ru/programming_school/payment/





Вcе записи подраздела.


Сейчас вы проходите урок:
JavaScript без этого, никогда не будет понятен. Хотите ясности?

<< Назад  |  Далее >>


Все уроки с тегом:  js