2011-12-16 3 views

ответ

4

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

var a = 1, 
b = function() { 
    var a = function() {}; 
    a = 10; 
    return; 
}; 
b(); 
alert(a); 

Теперь вы можете понять, что на самом деле происходит. «a» снова объявляется внутри функции «b», поэтому на самом деле есть две «a» переменных. Один из них - «window.a», а другой - «b var a», но NOT «b.a», потому что он недоступен вне закрытия или функции.

Другими словами, вы получаете то, что кодируете.

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

+0

Спасибо, что я смог понять этот переформатированный код. –

+0

Итак, я полагаю, что основным моментом было то, что вы должны написать свой код, как будто его уже разобрали. Это приведет к большей читаемости. Дуглас Крокфорд - это тот, из которого можно учиться. –

+0

@ emeraldcode.com Я лично согласен, но есть люди, которые любят разбивать код, чтобы вы могли видеть и читать «суть» функции наверху, со всеми последующими частями. Этот стиль - это то, что JavaScript (I * think *) пытается облегчить. Лично я научился программировать в Паскале еще в тот же день, и вам нужно было делать все в обратном порядке :-) – Pointy

6

Вы объявляете символ «a» в функции с последней строкой. Это «а», на которое влияет оператор присваивания.

Заявления о декларации функций поднимаются до верхней части функции и интерпретируются первыми. Таким образом, оператор присваивания эффективно выполняет после, вы объявили функцию (локальную для функции «b») с именем «a». Назначение, поэтому влияет на , что символ, а не глобальный «а».

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

+0

Ничего себе. Это отличный пример прекрасной гибкости javascript и проблемы, с которыми вы можете столкнуться, если не будете осторожны с тем, как вы его пишете. –

+1

Да! Очевидное упрощение JavaScript - вот что усложняет :-) – Pointy

+0

Извините, Pointy, вы сделали тот же ответ, что и я. Я не заметил вашего ответа, но я сохраню свое для ясности. +1 к вам, сэр. –

Смежные вопросы