Javascript.RU

Структура javascript

Update: Более новый материал по этой теме находится по адресу https://learn.javascript.ru/structure.

В этом разделе рассмотрена общая структура и синтаксис javascript-кода с учетом основных особенностей языка.

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

Стандарт (формальное описание синтаксиса и работы языка) javascript называется ECMAScript. На нем, кстати, основан не только javascript, но и несколько других языков, например ActionScript (Flash).

По ECMAScript есть спецификация, которая подробно описывает синтаксис, управляющие конструкции и базовые объекты языка.

Например, вот скрипт, который работает, используя только ECMAScript. Кстати, поэтому он будет работать и в других языках, основанных на ECMAScript, включая ActionScript:

var max = 5
try {
  for(var i=0; i<Number.POSITIVE_INFINITY; i++) {
    if (i>max) throw new Error("failed to reach the stars")
  }
} catch(e) { }

ECMAScript - и правда очень особенный язык. Особенно для тех, кто пришел из PHP, C, Java. В нем особым образом устроены объекты и функции.

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

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

Но при переходе на новую строку в javascript точка с запятой становится необязательна, ее можно не ставить.

Эти две строки полностью эквивалентны:

a = 5
a = 5;
В javascript перевод строки почти всегда подразумевает точку с запятой.

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

Вот так не будет работать:

var a = "длинная 
  строка "

Так как перевод строки подразумевает точку с запятой, и javascript поймет это как

var a = "длинная;
  строка ";

То есть, сообщит о незавершенной строке (unterminated literal) в первой строчке этого примера.

Или, например, следующие два примера кода эквивалентны:

return
  result;

то же самое, что и

return;
result;

и совсем не то же, что

return result

В обоих случаях будет возвращено значение undefined (это значение возвращает любая функция, где нет оператора return, либо оператор return вызван без аргумента), а не result.

Чтобы многострочные операторы работали как надо - перенос строки можно указывать обратным слешем "\", вот так:

var a = "длинная \
  строка "

return \
   result;

Полный список синтаксических конструкций и операторов приведен в справочнике. Они похожи на PHP/C/Java, но многие имеют особенности, знание которых поможет грамотно программировать на javascript.

Блоки задаются фигурными скобками.

Локальные переменные объявляются при помощи var. Причем, в отличие от C/Java, сам по себе блок не задает отдельную область видимости.

var i = 0
{
  var i=5
  alert(i) // 5 
}
alert(i) // тоже 5

Комментарии возможны в двух вариантах // и /*...*/:

// однострочные комментарии 

/* 
   многострочные
   комментарии
*/

Переменные в javascript слабо типизированы. Это означает, что при объявлении не нужно указывать тип. Можно присвоить любой переменной любое значение.

Однако при этом интерпретатор javascript (браузер) всегда знает, какого типа значение содержит данная переменная, а значит - какие операции к ней применимы.

Переменную не обязательно объявлять. Достаточно ее просто присвоить:

x = 5

Далее мы разберем основные типы переменных и действия с ними.

Функции задаются объявлением function со списком параметров:

function sayHello(name) {
    alert("Hello "+name)
}

Язык javascript предоставляет очень мощные возможности по работе с функциями.

Например:

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

Локальная переменная объявляется так:

var i

При объявлении можно тут же присвоить переменной значение и объявить другие переменные:

// то же самое что 3 отдельных объявления c var
var a=5, b=6, str = "Строка"

В следующем примере переменная a в функции go объявлена как локальная. Поэтому глобальное значение a=1 не изменяется в процессе выполнения go.

a = 1
function go() {
    var a = 6
}

go()
alert(a) // => 1

А здесь - ключевое слово var опущено, поэтому значение меняется:

a = 1
function go() {
    a = 6
}

go()
alert(a) // => 6

Кстати, глобальных переменных в javascript на самом деле нет. То, что называют "глобальными" - на самом деле свойства специального объекта window. Например, в последнем примере alert(window.a) тоже выдало бы 6.

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

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

Как правило - всё, что относится к компоненту, объявляется в виде свойств единого глобального объекта: ExtJS, dojo и т.п. Вы можете увидеть это в любом известном JS-фреймворке.

Обратите внимание, в javascript все директивы var срабатывают при входе в функцию, неважно где они находятся.

Например, посмотрим на функцию:

function cmp(a,b) {
  if (a>b) {
    res = 1
  } else if (a<b) {
    res = -1
  } else {
    var res = 0
  }
  
  return res
}

При входе в функцию интерпретатор javascript находит все объявления var и создает соответствующие локальные переменные.

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

Для объявления строк используются кавычки - простые ' или двойные ". Между ними нет никакой разницы.

a = 'моя'
b = "строка"

Для конкатенации строк используется оператор +.

a = "моя"
b = "строка"
alert(a + ' ' + b)

Более подробно строки и другие базовые типы рассмотрены в статье Базовые типы: Строки, Числа, Boolean.

Javascript - объектный язык. В нем все является объектами. Строки, числа, функции и массивы - все это объекты со своими методами и свойствами. Это надо знать и иметь в виду с самого начала.

Методы объектов вызываются через точку. Например, у строки String есть метод toUpperCase, возвращающий строку в верхнем регистре:

name = "Vasya"

alert( name.toUpperCase() )

Или даже так:

alert( "Vasya".toUpperCase() )

Практически всё в javascript делается при помощи вызова методов различных объектов.

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

В javascript есть два основных способа объявить массив.

Для массива с числовыми индексами обычно используется объект типа Array.

arr = new Array("my", "array")
alert(arr.length)  // 2

Свойство length содержит длину массива, которая всегда равна последнему индексу (в примере выше - это 1) плюс один.

Обычно используется другая, почти эквивалентная, запись массива, использующая квадратные скобки:

arr = [ "my", "array" ]
alert(arr[0]) // "my" <- нумерация от нуля

Новые элементы можно добавить в конец методом push.
Для перебора значений используется цикл for.

arr = ["первый", "второй"]
arr.push("третий")

for(var i=0; i<arr.length; i++) {
  alert(arr[i]) 
}

Более подробно массивы с числовыми индексами рассмотрены в статье Массивы .

Для массивов, ключи которых являются строками, используется Object.
Следующая запись задает ассоциативный массив с ключами n и str:

obj = { 
  n: 1,
  str: "Вася"
}

Для получения свойства объекта используется оператор-аксессор: точка либо квадратные скобки.

obj = {   n: 1,  str: "Вася" }

alert(obj.n) // точка 
alert(obj["n"])

Квадратные скобки позволяют получать свойство по переменной-ключу.

var key = "str"
alert(obj[key])

Точка используется, если имя свойства точно известно. Вызов obj.key вернет свойство по имени "key", а квадратные скобки - по значению, которое содержится в переменной key.

При обращении к отсутствующему свойству возвращается специальное значение undefined.

a = { }  // пустой объект
alert(a.something)  // undefined
alert(a.blabla === undefined)

В примере был использован оператор сравнения без приведения типа.

Более подробно о том, как перебирать ключи массива, и о самих объектах - вы можете узнать из статьи Объекты Javascript в примерах.

Более подробно обо всем этом можно почитать в разделе сайта Основные элементы языка.

  • Вы разобрали основы языка javascript.
  • Узнали, какие базовые типы в нем есть
  • Ознакомились с синтаксисом функций и заданием переменных в javascript
  • Освоили основные операции с числовыми и ассоциативными массивами

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

Еще по теме:

Автор: Гость (не зарегистрирован), дата: 22 сентября, 2009 - 12:54
#permalink

Мне кажется, что одна из самых ключевых фраз

"Javascript - объектный язык. В нем все является объектами. Это надо знать и иметь в виду с самого начала."

нуждается в более подробной расшифровке.

Я наверно раза три или четыре перечитывал разные разделы учебника, пока наконец понял, что все переменные "простых" типов в JS - также объекты. Просто многие переменные типа String или Array объявляются неявно без директивы new.


Автор: Aiaks (не зарегистрирован), дата: 23 сентября, 2009 - 15:17
#permalink

Прекрасная статья, всё кратко, чётко и понятно. Побольше такие статей...
респект автору!


Автор: Дмитрий aka XPLORER (не зарегистрирован), дата: 17 ноября, 2009 - 15:12
#permalink

Здравствуйте!

Хотел бы уточнить для тех кто не понял, строка:

var a=5, b=6, str = "Строка"

Создает локальную переменную "a", и две глобальных "b" и "str".
Поэтому использовать такую конструкцию внутри функции крайне не рекомендуется.

Спасибо, хорошая статья.


Автор: Regent, дата: 11 января, 2010 - 14:36
#permalink

Дмитрий, все переменные в этом примере - локальные.


Автор: Гость (не зарегистрирован), дата: 31 августа, 2013 - 08:05
#permalink

Дмитрий aka XPLORER, не вводи людей в заблуждение.

var b=4;
function f(b) {
	var a=5, b=6, str = "Строка"
	b++;   
	return b
}

document.write( f(8) + " "+ b); // 7 4, а не 7 7 как ты утверждаешь

Автор: Ferrum (не зарегистрирован), дата: 13 мая, 2014 - 09:45
#permalink

var a=5, b=6, str = "Строка"-происходит объявление переменных и присваивание им значений.
var a=j=g=6;-происходит объявление переменной а и присваивание ей значения, и присваивание значения двум глобальным переменным (j и g).


Автор: Саня2002 (не зарегистрирован), дата: 19 ноября, 2009 - 11:40
#permalink

Автор-молодец....Кстати, нет полной электронной версии данных статей?


Автор: Гость (не зарегистрирован), дата: 24 февраля, 2010 - 15:24
#permalink

автар создал лцчший рускоязычный ресурс по теме! вот электронный вариант бы тож хотелосьбы в комнить стареньком chm)))


Автор: возжаждавший, дата: 24 февраля, 2010 - 17:13
#permalink

ВСем привет, вопрос такой, там в статье есть код

var i = 0
{
  var i=5
  alert(i) // 5 
}
alert(i) // тоже 5

Оба раза выводится 5, как и написано в комментариях. И вот здесь большой СТОП!!!.
Друзья! Цитата автора
"Директива var при объявлении переменной делает ее локальной, то есть видимой только внутри текущей функции."

Сие означает, что второе var i=5 создал и инициаровало переменную i, которая видима ТОЛЬКО ВНУТРИ фигурных скобок
Отсюда крайне непонятно, когда переменная i, созданная при ПЕРВОМ объявлении и инициализированная нулём, стала равной пяти (что мы наблюдаем при втором вызове alert(i))

Крайне непонятно. Извините.
...РАзобрался. Мне, систу, и неводомёк было, что такая консрукция
var i = 6
var i
в javascript вполне себе корректна. Может, кому-то пойдёт на пользу сия крайне важная денталь для тех, тем более. кто пришёл из других языков.


Автор: B@rmaley.e><e, дата: 24 февраля, 2010 - 17:20
#permalink

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


Автор: Илья Кантор, дата: 25 февраля, 2010 - 00:20
#permalink

Если подробнее - интерпретатор javascript обрабатывает все объявления var в функции один раз - условно говоря, при входе в функцию.

Например, в следующем коде присваивание a=5 относится к локальной переменной. Несмотря на то, что объявление var идет ниже, оно(как и все остальные var) обрабатывается при входе в функцию.

window.a = 0
function f() {
  a = 5 // установит локальную переменную

 var a
 
 alert(a) // 5
 alert(window.a) // 0
}
f()

Автор: Гость (не зарегистрирован), дата: 18 марта, 2010 - 08:27
#permalink

>Для перебора значений используется цикл for.

for (x in y) { ... };


Автор: Pushers-> (не зарегистрирован), дата: 8 июня, 2010 - 23:24
#permalink

Автору спасибо! Хорошая статья, текст написан нормальным, понятным языком - всё чётко.


Автор: ИльяДум (не зарегистрирован), дата: 24 июня, 2010 - 13:50
#permalink

Да, спасибо, отлично всё рассказано.


Автор: Гость (не зарегистрирован), дата: 30 июля, 2010 - 08:14
#permalink

Щас мозг лопнет!!!!!!!!!!!!!!!!!!!!!!!
Не хочу никого обижать но учебник напиан крайне сложно.
Во-первых - его оглавление.При изучении невозможно соеринтироватся где и что!Лутше уж сделать один урок - для полного рассмотра пременных ,второй - для функций а самый первый уделить синтаксису и только синтаксису.
Во-вторых - сама непонятность фраз.Уже с первого урока когда человеку только обясняют что такое javascript ему попутно "впихивают" alert.Это кстати очень запутывает.

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


Автор: Илья Кантор, дата: 30 июля, 2010 - 13:56
#permalink

Добрый день!

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


Автор: KOT(GDI) (не зарегистрирован), дата: 26 июня, 2011 - 01:36
#permalink

Лучше б, ему сказал учить русский язык сначало.


Автор: Гость (не зарегистрирован), дата: 28 августа, 2011 - 17:58
#permalink

Сам бы школьный учебник по русскому полистал "сначало,".


Автор: Гость (не зарегистрирован), дата: 8 июля, 2011 - 10:08
#permalink

Введите сквозную нумерацию для начала =\


Автор: Гость (не зарегистрирован), дата: 4 января, 2012 - 19:40
#permalink

Расскажите пожалуйста чайнику, где должен находится текст пользовательской
функции в javascript?


Автор: Гость (не зарегистрирован), дата: 30 июля, 2010 - 16:27
#permalink

Не надо, не учи javascript, особенно про alert, а то мозгом окружающую среду забрызгаешь!

Если честно, то ничего проще этого учебника я не видела и по нему и училась. А alert в первом уроке нужен (судя по предыдущему комменту) в том числе и для того, чтобы если человек даже этого не понял, то чтобы сразу забивал на js и программирование вообще.


Автор: wl004754 (не зарегистрирован), дата: 20 сентября, 2010 - 20:59
#permalink

Из статьи:

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

Вопрос: Какие есть доступные способы обмена между глобальными переменными?


Автор: melky, дата: 26 июня, 2011 - 08:13
#permalink

sessianStorage, document.cookie, window.name и другие.


Автор: Гость (не зарегистрирован), дата: 26 сентября, 2010 - 13:58
#permalink

Хочу поинтересоваться. При изменении status.Text на response.Text , выводит каракули вместо "Ваш голос принят". Где можно изменить кодировку?


Автор: Гость (не зарегистрирован), дата: 26 сентября, 2010 - 13:59
#permalink

Хочу поинтересоваться. При изменении statusText на responseText , выводит каракули вместо "Ваш голос принят". Где можно изменить кодировку?


Автор: Гость (не зарегистрирован), дата: 13 ноября, 2010 - 12:48
#permalink

А у меня почему-то для переноса длинных строк не работает обратный слеш, как здесь написано.
И Firebug для текста

return /
result;

сообщает:

illegal character
return //n

В чем тут дело?


Автор: Гость (не зарегистрирован), дата: 13 ноября, 2010 - 13:29
#permalink

Тут выше ошибся, конечно имел в виду
return \
result

и сообщение
illegal character
return \\n

А, ксати,
return result1+
result2;
срабатывает без всяких обратных слешей, т.е., никакой точки с запятой при переводе строки не появляется. Но просто весь result на другой строке от return действительно не подхватывается.


Автор: Гость (не зарегистрирован), дата: 13 ноября, 2010 - 13:41
#permalink

А вот в чисто текстовой строке работает:

return "Некоторая \
строка"

Правда, и все табы на перенесенной строке подхватывает.


Автор: Гость (не зарегистрирован), дата: 13 ноября, 2010 - 15:19
#permalink

Кстати, работает даже
return result1
+
result2

как если бы было
return result1+result2

Судя по всему:

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

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


Автор: goper (не зарегистрирован), дата: 18 ноября, 2010 - 13:37
#permalink

удивляет меня, конечно, что массив имеет тип данных - object и хотелось бы значть когда массив вообще может иметь тип данных array, который все-так есть


Автор: B@rmaley.e><e, дата: 18 ноября, 2010 - 14:33
#permalink

Нет такого типа array. Array - это конструктор массивов, а не тип.


Автор: LNK (не зарегистрирован), дата: 7 апреля, 2011 - 01:36
#permalink

Все таки надо говорить не "слабо типизированный" а "с динамической но без статической типизации".
Статическая типизация -- знаем тип в момент компилирования (или построения синтаксического дерева при интерпретации).
Динамическая типизация -- знаем тип в рантайме.
Cи -- только статическая типизация.
Java -- и статическая и динамическая.
JavaScript -- только динамическая.


Автор: Артемий (не зарегистрирован), дата: 8 апреля, 2011 - 21:32
#permalink

учебник написан бездарно

Неизвестное всегда должно объясняться через известное и формировать с ним как можно более крепкие и всесторонние связи.

Схема такая:
- ввел новое понятие через старые,
- закрепил примерами,
- небольшое самостоятельное упражнение с ответом.

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

Эта книга не нужна тем, кто знает джаваскрипт и непонятна для тех, кто его не знает.

Автор, перепиши нафиг свою книгу


Автор: ksi, дата: 9 апреля, 2011 - 20:38
#permalink

Зря Вы так...
Я не могу сказать, как воспринимается этот учебник "с нуля", так как кое-что знала (и пыталась делать) раньше.
А вот много полезного - для тех, кто находится "посередине". То есть что-то знает, но не владеет в совершенстве. Читаешь и начинаешь понимать, где делал ошибки, что можно написать проще и т.д. А то, что где-то видел, но не понял, наконец-то "доходит" )
Понравилось, что в учебнике много примеров.


Автор: Marwell, дата: 5 августа, 2011 - 17:09
#permalink

+1!
Только после 4-5 прочтения этого начинаю понимать, из-за того что некоторые понятия уже гдето слышал.. возвращаюсь туда, читаю их там, возвращаюсь сюда, а ссылок бывает по 3-5 получаю путаницу, короче посистемней бы весь материал, а то все и сразу не лезет, хотя, когда уже немного понимаешь JS то статьи и сайт кажутся логичными и упорядоченными.


Автор: Гость (не зарегистрирован), дата: 11 мая, 2011 - 12:41
#permalink

Мне кажется тут не хватает некоторой информации насчет типов данных..

var s1 = 'abc';
var s2 = 'abc';
s1==s2; // true

var s3 = new String('abc');
var s4 = new String('abc');
s3==s4; //false

Мы видим что s1 и s2 при сравнении ведут себя как обычные простые типы данных, а вот поведение s3 и s4 больше похоже на "ссылки" (есть такое понятие в js?) - то есть как указатели на разные объекты, просто с одинаковым содержимым. Это же относится к сравнению массивов и своих объектов:

var a1 = [];
var a2 = [];
a1==a2; //false

var o1 = {};
var o2 = {};
o1==o2; //false

Нельзя ли раскрыть эти моменты более подробно, почему "в js все объекты", а сравнение работает по-разному?


Автор: Гостья (не зарегистрирован), дата: 16 мая, 2011 - 23:50
#permalink

На процентов 80 соглашусь с Артемием (немножко резковатый комментарий, но суть я поддерживаю). Во введении написано - "Этот учебник создан, преимущественно, для обучения современному javascript-программированию с нуля." Но там не написано "для тех, кто уже знаком с программированием". Как-то не стыкуется. Я-то обрадовалась, что вот нашла учебник для полных чайников в программировании. Может, он и хорош, но только не для чайников. И фраза из введения ввела меня в заблуждение.


Автор: Гость (не зарегистрирован), дата: 15 июля, 2011 - 15:15
#permalink

Основам программирования учиться на JavaScript - полный бред. Язык специфический, в каждом втором предложении по описанию JS говорится о его отличии от, скажем, С++, Java. А вот в описании С++ нигде не указываются его отличия от JavaScript. Почему? Потому что C - стандарт программирования, так же как и Pascal, Java. Только каждый из них тоже чуть-чуть специфичен. С/С++ - для полного управления памятью и процессами ОС, Java/C#/Python - практически полностью объектно-ориентированные языки, PHP/Perl - больше для написания скриптов по управлению и выводом больших блоков данных и текста, Pascal - без особых заморочек, на которые не нужно отвлекаться, если вы обучаетесь только лишь алгоритмам в программировании. Для самого начала изучите структурное/функциональное программирование (С, Pascal), потом обязательно переходите на ООП (C++, Java, PHP или Python). А уж дальше сможете осилить абсолютно любой язык. В том числе и JS на уровне гораздо вышем, чем тупое написание onclick="" для странички.


Автор: Гость (не зарегистрирован), дата: 15 июля, 2011 - 15:27
#permalink

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

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


Автор: Гость (не зарегистрирован), дата: 21 июня, 2011 - 06:38
#permalink

Ребята, (личное мнение) "Этот учебник создан, преимущественно, для обучения современному javascript-программированию с нуля." - это реклама. А вот это "обучение современному javascript-программированию" - кюч. Не новость, не моя идея: "был бы ученик, а учитель сам найдётся", весьма древнее высказывание, но очень точное. Захочешь научится, пропесочишь не только этот учебник. Таким образом этот учебник не единственный вариант "обучения современному javascript-программированию с нуля". Если вы его читаете, значит подключены к Сети. Если подключены к сети, то какие могут быть расстройства что автор написал что то не так, как вам хотелось бы?


Автор: Гость (не зарегистрирован), дата: 11 июля, 2011 - 22:51
#permalink

Чем умничать лучше бы порекомендовали учебник написанный нормальным языком действительно для чайников


Автор: Гость (не зарегистрирован), дата: 12 июля, 2011 - 16:58
#permalink

Позволю и себе "сумничать".

google.com тебе в руки. Если голова есть, то путем некропотливого поиска информации можно изучить не только "циклы", "массивы", "переменные", но и "алгоритмы сортировки", "ООП" и прочее. Благо (для Вас) из всех учебников, что находит поисковик - 90% для "ламеров". Само собой, нельзя ограничиваться чтением только лишь одной статейки или книги, как и при чтении основ любой науки. Если уж совсем НИЧЕГО не понятно, то, извините, какого *** вы полезли в программирование?

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

З.Ы. Сайт очень хорош для обучения JS для любого, кто знает хотя бы основные понятия языков программирования, знает поверхностно html и css. Ну а кто не знает - написал выше.


Автор: Гость (не зарегистрирован), дата: 27 августа, 2011 - 14:54
#permalink

Вопрос по поводу синтаксиса строчек и блоков:

function sayHello(name) {
alert("Hello "+name)
}

и

function sayHello(name) {
alert("Hello "+name)}

Эквивалентны?


Автор: Гость (не зарегистрирован), дата: 2 октября, 2011 - 17:21
#permalink

Кстати, глобальных переменных в javascript на самом деле нет. То, что называют "глобальными" - на самом деле свойства специального объекта window. Например, в последнем примере alert(window.a) тоже выдало бы 6.

Ничего не выдаёт. Браузер - лиса найтли от 01.10.11


Автор: 271319 (не зарегистрирован), дата: 7 ноября, 2011 - 15:24
#permalink

простите за глупый вопрос но осмелюсь все же задать его

scope = "глобальная";
function checkscope(){
scope = "локальная";
}
document.write(scope);

почему получаем результат "глобальная " ведь в функции ми опустили var
тем самым объявив переменную scope в функции checkscope()
глобальной переменной которая объявлена в контексте исполнения а не в собственном уникальном контексте функции checkscope().

Еще раз приношу извинение за глупый вопрос но надеюсь вы поможете мне разобраться


Автор: griffonn, дата: 8 ноября, 2011 - 14:09
#permalink

может быть, надо вызвать функцию?


Автор: 271319 (не зарегистрирован), дата: 9 ноября, 2011 - 14:03
#permalink

вот поэтому я и задался вопросом, что если переменная объявлена внутри функции без var то она объявляется во всем контексте исполнения и по идее ,как я понял, она доступна даже без вызова ф-ии, ведь переменная обладает глобальной видимостью а не локальной которая становится доступной лишь при вызове ф-ии и то лишь в контексте исполнения самой ф-ии. вот в этом моменте понятия глобальной видимости я и запутался меняя смущает тот факт что глобальная (переменная которая объявлена в ф-ии) становится доступной лишь при вызове ф-ии но не при вызове из вне ф-ии (простите за тафтологию).
P.S. СПАСИБО за то что уделяете внимание мне, за разбор элементарных вещей которые мне увы со старта не ясны


Автор: Glad (не зарегистрирован), дата: 4 января, 2012 - 07:33
#permalink

В функции ты не объявляешь переменную, поскольку нету var, ты ей присваиваешь значение!


Автор: Продик (не зарегистрирован), дата: 29 ноября, 2011 - 20:54
#permalink

Каракен, так вроде лучше работает
aaa = ["Миша","Дима","Петя","Костя","Глаша"]
str = "Победители#"
for (var i=0; i


Автор: Гость (не зарегистрирован), дата: 8 января, 2012 - 20:47
#permalink

не, ну реально замануха для чайников
этот материал явно не для "с нуля"
причем, материал хорошо написан, чувствуется, но как будто это не первая глава, а вторая или третья. Автор, ну напиши основы для чайников. Трудность ведь не в том, что я (и не только я) тупые слишком или не способны к какому-нибудь виду мышления, а просто какие-то вещи расставить по полочкам, даже я бы сказал, "перевести на русский язык"
я пока только изучил более менее html и css. Стоит ли мне, для того, чтобы понять js изучать и С? Мне вообще С нужно?)

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


Автор: анэрон (не зарегистрирован), дата: 4 ноября, 2013 - 12:09
#permalink

Не обязательно С изучи любой высоко уровневый язык программирования, для понимания алгоритмов и структур можешь Paskal можешь С или С++ можно даже Basic неважно, и ненужно даже влезать с головой во все тонкости. Но хотя бы простые алгоритмы нужно понять. Месяца часа по два в день а если с головой и усиленно то и двух недель тебе хватит чтобы освоить основы. Которы применются во всех языках программирования.


Автор: German_1984, дата: 14 марта, 2012 - 15:00
#permalink

>Вот так не будет работать:
>var a = "длинная
> строка "
>
>Так как перевод строки подразумевает точку с запятой, и javascript поймет это как
>var a = "длинная;
> строка ";

Тут ошибка. Это не будет работать не из-за точки с замятой а из-за разрыва строкового литерала.

var a = "длинная"+
" строка";

прекрасно работает и не сообщает об ошибке


Автор: Гость (не зарегистрирован), дата: 9 апреля, 2012 - 17:44
#permalink

Автору спасибо, понятно и локанично.
Для тех, кто кричит: "Автор, перепиши книгу", ребята это вам не детский сад, где говорят "возьмите красный карандашик" и тыкают пальчиком на нужный цвет.
Это "университет", где многое нужно найти самому.


Автор: neytro (не зарегистрирован), дата: 3 июня, 2012 - 18:46
#permalink

Спасибо автору.


Автор: neytro (не зарегистрирован), дата: 3 июня, 2012 - 18:47
#permalink

Если есть возможность...сделайте мне на почту рассылку своих статей. Буду признателен.


Автор: auine (не зарегистрирован), дата: 13 июля, 2012 - 10:36
#permalink

привет, поглядите на такое
a = 1;

function aa ()
{

var a = 2
console.log(a)

}

aa()
console.log(a)

Автор: Гость (не зарегистрирован), дата: 13 июля, 2012 - 10:42
#permalink

то есть
a

= 1;
function aa ()
{
 console.log(a)
var a = 2
console.log(a)
 
}
 
aa()
console.log(a)

Автор: Aetae, дата: 14 июля, 2012 - 00:24
#permalink

И в чём проблема?

Ешё раз, внимательно и до конца читаем:
http://javascript.ru/tutorial/foundation/structure#oblast-vidimosti


Автор: Гость (не зарегистрирован), дата: 4 апреля, 2013 - 21:41
#permalink

Спасибо, было бы не плохо, если по ajax так кто написал


Автор: apapacy (не зарегистрирован), дата: 5 мая, 2013 - 19:29
#permalink

Если я не ошибаюсь, перенос строки бэкслэшами - фича браузеров, а не стандарт языка. Стоит ли ее использовать?


Автор: Плюснин Александр (не зарегистрирован), дата: 2 августа, 2013 - 09:21
#permalink

Java скрипт, PHP имеют сходный синтаксис с C++, зная его, будет намного легче это всё учить. Так что ребята учите С++. Щас читаю и почти ничего нового, только методы для работы с отдельным типом отличны от С++, но это не беда. Удачи всем!!


Автор: D1m0k (не зарегистрирован), дата: 25 ноября, 2013 - 13:52
#permalink

Знающие люди, подскажите, в 1с есть javascript для работы с adobe acrobat reader, но он работает не так как надо.

function doit(doc,t){
var re=/"+Имя+"$/gi;
if (re.test(doc.path)){
app.clearInterval(t);
doc.layout='TwoColumnRight';
app.execMenuItem('SelectAll');
app.execMenuItem('Copy');
doc.closeDoc();
}
}
app.addMenuItem({ cName: 'mymenu', cParent: 'File', cExec: 'this.doit(this,this.timeout);'})
var timeout = app.setInterval('app.execMenuItem(\'mymenu\')', 10);

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


Автор: Rus) (не зарегистрирован), дата: 11 октября, 2014 - 19:50
#permalink

Спасибо!!! "При входе в функцию интерпретатор javascript находит все объявления var и создает соответствующие локальные переменные" - это как раз то, что доставило мне проблему, из-за чего я и открыл этот сайт))


Автор: Просто мимо проходила (не зарегистрирован), дата: 6 августа, 2017 - 12:06
#permalink

Перечитываю эту статью раз 10, все поняла кроме массивов, а жаль, может кто-нибудь вкратце объяснил, что именно здесь происходит

arr = new Array("my", "array")
alert(arr.length) // 2


Автор: Разработчик (не зарегистрирован), дата: 12 июня, 2018 - 21:08
#permalink

Структура языка отличная, язык постоянно используется при создании сайтов. Спасибо!


 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние темы на форуме
Forum