2010-09-19 3 views

ответ

9

Потому что на какой строке вы фактически объявляете переменную с помощью «var», не имеет значения, если она остается в той же функции. Если функция имеет var x, объявленную где угодно, любая ссылка на это имя считается локальной для области, в которой она объявлена.

Конечно, как правило, вы не ссылаться на переменную, прежде чем он объявлен, но рассмотреть этот фрагмент кода:

function foo(a) { 
    if (a) { 
    var b = "something"; 
    } 
    console.log(b); 
} 

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

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

+1

+1, точно вправо. Подробнее: http://blog.niftysnippets.org/2008/03/poor-misunderstood-var.html –

+0

Зачем вам делать то, что вы сделали в добавленном фрагменте? Внедряет проблемы обслуживания без реальной выгоды. –

+0

Нет, компилятор видит оператор 'var foo' и компилирует foo как локальную переменную. Затем, когда код интерпретируется, foo еще не определено, чтобы иметь какое-либо значение. Следовательно, это значение «неопределено». Помните, что есть две фазы: компиляция и исполнение. Все объявления переменных и функций обрабатываются во время компиляции. Но назначение должно выполняться во время выполнения, потому что вам нужно оценить выражения, чтобы получить правильное значение. – slebetman