Локальная и глобальная переменная Javascript

Я новичок в JavaScript, и я делал некоторые практики в области локальных и глобальных переменных, следующий мой код (fiddle):

var myname = "initial"
function c(){
    alert(myname);
    var myname = "changed";
    alert(myname);
}
c();

когда вызывается первое предупреждение, оно показывает myname как undefined. поэтому я запутался в том, что я не могу получить доступ к глобальному экземпляру myname, и если я не определяю myname внутри функции, тогда он будет работать нормально.

Ответ 1

В Javascript объявления переменных автоматически перемещаются в начало функции. Таким образом, интерпретатор сделал бы это более похожим:

var myname = "initial"
function c(){
    var myname;
    // alerts undefined
    alert(myname);
    myname = "changed";
    // alerts changed
    alert(myname);
}
c();

Это называется "подъем".

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

Ответ 2

Он не заменяет глобальную переменную. То, что происходит, называется "переменным подъемом". То есть myname var myname; вставляется в верхнюю часть функции. Всегда инициализируйте свои переменные перед их использованием.

Попробуйте это

var myname = "initial"
function c(){
    alert(myname);
    myname = "changed";
    alert(myname);
}
c();

Fiddle -

http://jsfiddle.net/xjmBf/2/