2014-11-12 1 views

ответ

3

От the MDN:

JavaScript не имеет блок операторов сферы; скорее, переменная , объявленная в блоке, является локальной для функции (или глобальной области) , что блок находится внутри.

Область действия переменной в JavaScript - это вся функция, в которой она объявлена ​​(или глобальная область), поэтому у вас есть только одна переменная local.

Ваш код эквивалентен

function foo() 
{ 
    var local; 
    local = 1; 
    { 
    local = 2; 
    } 
    return local; 
} 
foo() 

Обратите внимание, что ES6 (новая норма JavaScript) делает ввести lexical scoping with let но it's not yet really available.

+0

Он доступен для гармонии firefox и nodejs. – simonzack

+1

@simonzack Разве вы не заметили, что я связан с таблицей Kangax? Если ОП не кодирует серверную сторону, он не может позволить себе быть несовместимым с IE и Chrome, поэтому я сказал «не реально доступен». –

+0

А я вижу, я не нажимал на вашу ссылку. – simonzack

5

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

И это, как ваш код заканчивает

function foo() 
{ 
    var local = 1; 
    local = 2; 
    return local; 
} 
foo(); 

В ES6 вы можете создать области уровня блока с помощью Let. ES6 пока не поддерживается. подробнее об этом here

+2

Следует отметить, что в ближайшем будущем лексическая область будет доступна с ключевым словом ES6 let. – Capaj