Pull to refresh

Comments 24

Спасибо.
Было уже не раз.
Да-да, поиск не работает.
Поскольку объекты в Javascript — это тоже типа функции

Объекты в Javascript — это «типа» объекты. Функция является объектом, но не наоборот.
Да ради бога, но выглядят-то они как функции.
Ничуть. Выглядят они как коллекции других объектов.
Это просто оператор new принимает имя функции-конструктора.
Еще один человек, который даже не разобрался что же такое javascript, пытается нам что-то объяснить. Черт, да они никогда не закончатся.

А ведь в интернетах об этом сотни раз писали на сотне разных языках.

А еще в Javascript область видимости переменной ограничивается только функциями, а не блоками типа if (привет, Паскаль). Потому удобнее всего объявлять переменные в начале функции.
Ага, а еще ява скрипт вообще не ооп язык — там классов нет.
Мне кажется ashofthedream забыл тег «сарказм».
Судя по всему, вы правы. Признаю, не углядел.
Так автор же сказал «Излагаю простым русским языком.» Никакой попытки привнести монументальность этим «высером» не было!?
Дело тут в другом, автор, из за своей неосведомленности, в данной статье очень расходится с реальностю в которой мы живем. А это очень плохо.
Относительная оценка. А выдаётся за абсолютную. Если автор связан c языком/технологией на определённом уровне, который позволит ему понять основную суть происходящего (без вникания в тонкости), то для очень простого объяснения (как автор и подаёт), сгодилось бы. Тот уровень, с которого рассматриваете Вы, тоже относительный, так же, кто-нибудь может сказать, что всё, что Вы расскажете, будет расходится с более глубоким уровнем.

Технические, конечно, в статье много неверно описано. Но, это удобный вариант для изучающих — они пишут статьи определённого уровня (среднего, выше/нижу среднего и т.д.) и сами учатся на этом.

А о чём именно говорите Вы — про «очень расходится с реальностю в которой мы живем»?
Удобный вариант для изучающих — понимать что на самом деле происходит. Я, к примеру, сейчас сейчас являюсь начинающим Java разработчиком, и поверьте мне, за последние недели три я наткнулся на столько фундаментальных косяков, непонятностей, неровностей, отличительных особенностей и прочего. Что если бы у меня под рукой не было ни человека, который мог бы объяснить что тут происходит, ни несчитаеных десятков замечательных англоязычных статей в которых обсасываеца каждый шаг виртуальной машины — то я бы за эти две недели так бы и остался человеком, который три часа будет искать банальную ошибку в сравнении двух объектов типа Integer.

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

Если вам нравится выискивать информацию среди потоков откровенного говна, что ж, я Вас понять так и не смогу.
> Если вам нравится выискивать информацию среди потоков откровенного говна, что ж, я Вас понять так и не смогу.

Моя цель образовательная. Если человек пишет статью, он вкладывает в неё творческий процесс. То, что он пока на среднем уровне понимания технологии — это другой вопрос. И именно этот уровень поднимется за счет комментариев. Но комментариев не вашего плана. Я лишь отметил категоричный тон, как будто «вы знаете как надо, а статья — говно». Я не прав? Вы, кстати, не ответили, что такое «очень расходится с реальностю в которой мы живем». Но да ладно, меня это не столь волнует уже.

> То, что творится сейчас в мире JS (перечитал ну несравненно много мусора в интернетах когда пытался понять как же работает этот замечательный язык)- так это вообще какое-то безумие

А насколько глубоко вы различаете мусор от немусора в ES? Какова планка? Я ж отметил, статьи бывают разного уровня. В данном случае, у автора — статья: (а) прикладного уровня, (б) разбирающая основы, (в) разбирающая основы поверхностно; (г) полная технических ошибок — но это уже на более углублённом уровне, который автор не затрагивает.

Меня же всегда интересует вопрос справедливой оценки ;)

P.S.:

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

Вот вам «по меньшей части»: javascript.ru/ecmascript-in-detail (автор этих статей понимает фундаментальные основы JS; прошу простить, за то, что обратился к себе в третьем лице).
Извиняюсь конечно, если сейчас не получиться выразиться доходчиво…

Моя цель образовательная. Если человек пишет статью, он вкладывает в неё творческий процесс. То, что он пока на среднем уровне понимания технологии — это другой вопрос. И именно этот уровень поднимется за счет комментариев. Но комментариев не вашего плана. Я лишь отметил категоричный тон, как будто «вы знаете как надо, а статья — говно». Я не прав? Вы, кстати, не ответили, что такое «очень расходится с реальностю в которой мы живем». Но да ладно, меня это не столь волнует уже.

Я тоже так раньше думал, что любой творческий процесс достоин внимания. Что объяснение каких либо основ другим людям укрепит и свое собственное понимание. Но, теперь понимаю что это не так — да, это иногда забавно читать статью в которой человек делиться своим опытом, эмоциями, знаниями. Сейчас мы живем в таком времени, что любая домохозяйка может почувствовать себя именитым журналистом разбирающимся в «теме» и накатать статью на десяток листов А4. Тема может быть любая, но, как я выразился выше — в большинстве своем это мусор, который в силах написать каждый из нас. И он очень мешает если нам необходимы знания «как есть». Ваш коммент ниже, по поводу области видимости переменных, в десятки раз полезнее нежели десяток подобных статей от подобных авторов. Потому что он описывает суть языка, а не догадки человека который только-только начинает разбираться в теме. Да, я еще раз с удовольствием прочитал его, хотя информация, содержащаяся в нем мне давно знакома.

По поводу «вы знаете как надо, а статья — говно» — высказываться даже и не хочется, а вот за то, что упустил ваш вопрос по поводу реальности окружающей нас:

1. (упомянутое в вашем комментарии) — в JS, в отличии от другого языка по сути то и нет понятия локальная и глобальная переменная. Ибо замыкания такая чтука, что нечто-локальное, становится уже и не совсем локальным, а нечто глобальное может быть и не настолько глобальным — в плане лежать чуть выше по иерархии объектов нежели тот же объект window в браузере.

2. (опять же, упомнятнутое, но не рассписанное так же как и первый пункт) про указатель this. После прочтения данной статьи возникает масса вопросов — количество которых возратает если попытаться воспользоваться данным мануалом на практике, после прочтения одного абзаца в котором описывается почему this работает именно так как работает, в голове начинает ломаться привычная схема ооп основанная на классах, где этот указатель жестко привязан к объекту (у меня до сих пор, после довольно продолжительных скачков между php\js\java присутствует некий барьер в 1-2 недели, после которого мое мышление начинает переходить в js way...)

А насколько глубоко вы различаете мусор от немусора в ES? Какова планка?
Что касаеться ES, то тут планка задрана чуть выше нежели для остальных языков. Если примеры приведенные в статье мне непонятны (т.е. я не могу не запуская бразуер понять что произойдет, а могу только лишь догадываться) — то эта статья не помечается как мусор, в которые входят львиная доля «20 и еще три приема для разработки с помощью JQuery». Да, признаюсь еще в том, что так как js был моим вторым языком, то не делал упор на него, и поэтому большинство статей с чем-то жесткоким и мозговыносящим осталось так и не понято — и потому что не хватало времени на понимание данного материала, и потому что попросту данные знания не являлись жизненно необходимыми.

И кстати, спасибо за линк, статьи эти читал, не все конечно, но и после прочтения того что было прочитано также остались некоторые и неосвещенные моменты. Опять же причина понятна, js — не мой основной язык. Да и в ближайшем будущем сталкиваться буду с ним крайне мало.
Если примеры приведенные в статье мне непонятны (т.е. я не могу не запуская бразуер понять что произойдет, а могу только лишь догадываться) — то эта статья не помечается как мусор

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

Тут дело в том, что иногда, в прикладных статьях, используется упрощение терминологии в угоду большей ясности и простоты изложения (кодовое название: «литература для студентов»). Т.е. может быть переврана официальная терминология и очень упрощенны описания механизмов, но, цель — чтобы студент понял основную суть и мог писать прикладные программы. Такая литература может также позиционироваться, как профессиональная (с прикладной точки зрения).

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

Так вот с Вашей позиции («если мне понятны все примеры» статей первого уровня) я должен назвать практически все статьи — мусором. Но это не так. Это просто статьи другого плана, у них другая цель.

Даже в бумажных книгах иногда пишут сзади на обложке: «Уровень: начинающие» или «Уровень: опытные/профессионалы» (например, издательство «Питер» так делало).

В целом, да, Ваша позиция ясна. Спасибо, успехов.
А что Вы хотели передать, выделив цитату из текста?
Просто праздник какой-то.
Хотел процитировать наиболее дурацкие фразы, но тогода придётся цитировать всё.
Рано ещё писать статьи про язык. Вы его не знаете. Вообще.
Переменные в Javascript бывают глобальными и локальными. Глобальная переменная доступна везде, локальная — только в текущей области видимости.

Да, можно и так сказать. Технически же, большой разницы — глобальные/локальные — нет, механизм одинаковый. Есть только цепочка областей видимости, связанная с активным в данный момент контекстом исполнения, и в этой цепочке ищутся переменные — начиная из самого глубокого (активного) контекста — и вверх — до глобального.

Технически, глобальные переменные — всего лишь свойства объекта window, поскольку весь код выполняется в его контексте.

Да, для упрощённого описания, и для browser scripting, можно и так сказать. Но надо понимать, что глобальные переменные — это, по стандарту, свойства глобального объекта, а не window. И, хоть в стандарте сказано, что window в DOM-модели — это рекурсивная ссылка на глобальный объект, в действительности это не всегда так. По факту же, да, обращение к свойствам window будет возвращать переменные глобального контекста.

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

Вот самая распространённая ошибка (опять же, с технической точки зрения). Запомните, переменные объявляются только с ключевым словом var. Присвоение же вроде:

a = 10;

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

Но для упрощённого описания и предостережения, Ваше описание подойдёт.

Явно объявлять переменные можно и нужно ключевым словом var

Можно убрать слова «явно» и «можно» ;)

Передача кода по старинке — строкой, которая прогоняется через eval() — не попадает под это правило, код исполняется в той области видимости, где и определен.

На самом деле, это связано с тем, что в этом случае создаётся функция, как если бы «new Function», а такие функции имеют в качестве [[Scope]] только глобальный объект. Подробней.

var a = 10;
(function () {
    var a = 100;
    setTimeout('alert(a);', 0); // 10, а не 100
})();


Поэтому, конечно, удобней использовать в setTimeout-e сразу объект-функцию, а не строку.

Поскольку объекты в Javascript — это тоже типа функции, то свойство объекта определяется точно так же, как и переменная.

function myObject() {
var property = 0;
// Cамо собой, property будет доступно только внутри объекта.
}

Ну здесь Вы, конечно, отсебятину написали ;)

Функции — это тоже (типа) объекты. Обычные объекты, ничем не отличающиеся (кроме внутренних свойств) от других объектов.

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

Иначе можно подумать, Вы имеете в виду, говоря о «свойстве объекта» в данном примере, что-то типа «myObject.property».

var — в контексте функции создаёт свойство в объекте переменных контекста функции. Дальше, если ссылок на этот объект переменных нет, он уничтожается. Если есть (например, замыкание) — остаётся существовать.

А еще в Javascript область видимости переменной ограничивается только функциями, а не блоками типа if (привет, Паскаль). Потому удобнее всего объявлять переменные в начале функции.

Есть такая практика у некоторых (поскольку, технически, действительно, var-ы парсятся при входе в контекст и доступны на протяжении всего контекста, независимо от того, объявили ли мы их в блоке if или нет). Хотя, иной раз удобней объявить переменную по месту.

А что this?

А this — вообще больная тема многих начинающих программировать на JS. Главное, что нужно запомнить, что this всегда определяется при вызове кода контекста и передаётся вызывающей стороной (caller-ом). Уже сходу обычную функцию можно вызвать с двумя разными значениями this (по форме выражения вызова):

function f() {
  alert(this);
}

f(); // global (window)

f.prototype.constructor(); // f.prototype

Но вообще, это отдельная большая тема. Если интересно — можете почитать подробней (хотя, именно эту заметку я планирую переработать).

Успехов в изучении ES.
на ваши ссылки Опера ругается — «opera:illegal-url-0»
Парсер слово javascript съел (защита от XSS). Вместо буквы «с» написал "&/#99;" Причем, если использовать тег «а» с href="...". Выше написал просто ссылку — там не съел.
(некропост, ага)
А все эти заморочки сделаны с определенной целью?
до последнего момента ждал упоминания замыканий :)
>>Меня всегда смущало то, что в Javascript можно определять функции внутри функций, а использовать их потом где угодно.
Определить можно с ключевым словом var и она будет недоступна извне.
>>А еще в Javascript область видимости переменной ограничивается только функциями, а не блоками типа if (привет, Паскаль).
Интересно, расскажите, пожалуйста, где в Паскале область видимости ограничивается блоками? (Может, я чего-то не понимаю?)
Sign up to leave a comment.

Articles