[noob][javascript] грамотность написания

TeridaX

Здравствуйте, доброфорумчане-девелоперы (хотя подозреваю, что троллодевелоперы все равно влезут).
Практикую js, и возникло несколько вопросов, не подскажете?
В основном по блокам и точкам с запятыми.
1) есть ли разница в написании:
function myFunction(vars) {code}

и
var myFunction = function(vars) {code}

2) после блоков "{}" не ставятся ";", но в случае присваивания анонимной функции переменной (встречала в примерах) ее ставят.
//some code...
var myFunction = function(vars) {code};
//some code...

а) Обязателен ли знак?
б) Если нет, лучше его ставить везде или нигде?
3) В случае условных операторов, читала, что при однострочном выполнении блок из "{}" не обязателен.
Т.е. вместо
if (!MyVar) {doSomething(vars);}
else {doSomethingElse(vars);}

можно писать
if (!MyVar) 
doSomething(vars);
else
doSomethingElse(vars);

Потом встретила при просмотре примеров мнение, что лучше всегда ставить "{}". Мол, есть какие-то особые случаи...
а) Действительно ли есть опасность неправильного выполнения при отсутствии "{}"?
б) Нужны ли ";" в таких однострочных выражениях (как с применением "{}", так и без).
Заранее спасибо! :D
П.С.: Прошу троллей обходить тред лесом.

Ivan826

1) область видимости
2) ; не обязательна вообще
3) good practice - {} всегда, за исключением однострочных if'ов

if (condition)
{
var1 = 'foo'
var2 = 'foo2'
}

if (condition) var = 'foo'

Funia

2) http://stackoverflow.com/a/1834674
В случае именной функции ; не нужна, т.е. лучше не писать.
В случае анонимной функции лучше писать, ибо возможны неприятные баги:
 
var myFn = function {
alert("Surprise!");
} // <-- No semicolon!

(function {
//...
};

luna89


1) есть ли разница в написании:
code:
function myFunction(vars) {code}
и
code:
var myFunction = function(vars) {code}

Первый вариант эквивалентен

myFunction = function(vars) {code}

Этот код кладет функцию в глобальный объект, что не очень хорошо. Желательно, чтобы такого кода не было, функции должны быть распределены по классам и модулям.
Советую использовать библиотеку require.js или аналог.
2) после блоков "{}" не ставятся ";", но в случае присваивания анонимной функции переменной (встречала в примерах) ее ставят.

Настоятельно рекомендую использовать jslint. Все, что пропускает jslint, хорошо, что не пропускает, плохо.

Cherry

Может пригодиться: тут представлены популярные соглашения о написании js-кода и приведено их сравнение.

beluchy

Действительно ли есть опасность неправильного выполнения при отсутствии "{}"?

function foo(x){
if (x>0)
if (x<2) return 1;
else
return 0;
return 100500;
}

что вернет вызов:

foo(2);
?

TeridaX

Я бы подвинула 4 и 5 строку на еще один отступ. А то выглядит, как попытка разыграть.
После этого предположила бы, что 0.

TeridaX

Ответившим спасибо, понимания прибавилось.
Вы такие милые! А мне сказали, что вы меня с моими нубовопросами на части порвете. :D
require.js пока не пробовала. jslint ругается чуть ли не на каждую строку (отступы не те, использовать строгий синтаксис, прочее но вещь полезная (правда этот весь код разбирать не хочет, останавливается на n%).
Winning style — в закладки.

beluchy

выглядит, как попытка разыграть.
ну вот я раз и разыграл себя: написал внешний if-else, потом добавил внутренний if и долго думал что же не так )

apl13

А мне сказали, что вы меня с моими нубовопросами на части порвете. :D
А ты уже расслабилась... :croc:

artimon

Первый вариант эквивалентен

myFunction = function(vars) {code}

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

function a {
function x {
...
}
}

x // Будет ошибка тут функцию x не видно

Главная разница во времени создания.
http://learn.javascript.ru/function-declaration-expression

artimon

можно писать

if (!MyVar)
doSomething(vars);
else
doSomethingElse(vars);
Можно, но когда ты захочешь добавить ещё одно выражение, то придётся добавлять и скобки, например

if (!MyVar)
console.log(vars); // ooops
doSomething(vars);
else
doSomethingElse(vars);

А вообще много есть у Крокфорда в приложении к его Javascript: The Good Parts

TeridaX

Учимся читать до конца.

luna89


Главная разница во времени создания.

Так и есть, спасибо за информацию.
Оставить комментарий
Имя или ник:
Комментарий: