Область уровня блока Javascript

Может кто-нибудь объяснить мне область видимости блока javascript.

Я не могу воспроизвести приведенный ниже пример, предоставленный w3schools;

введите здесь описание изображения


person Naresh Chennuri    schedule 27.04.2016    source источник
comment
Вы можете поделиться кодом, который вы пробовали?   -  person gurvinder372    schedule 27.04.2016
comment
Вы пытались взять именно этот код и запустить его?   -  person Spencer Wieczorek    schedule 27.04.2016
comment
Вы хотя бы нажали на большую зеленую кнопку «Попробуйте сами»?   -  person Akshat Mahajan    schedule 27.04.2016
comment
Вы не знаете, что JS — это именно то, что вам нужно.   -  person Florent    schedule 27.04.2016
comment
stackoverflow.com/questions/500431/   -  person Fidel90    schedule 27.04.2016
comment
Не используйте w3schools, используйте MDN< /i> или спецификацию языка. Почтовый индекс, а не изображения, так как не все могут видеть размещенные здесь изображения.   -  person RobG    schedule 27.04.2016


Ответы (2)


До того, как была выпущена последняя версия Javascript (ES6/ES2015), Javascript имел только локальную область действия и глобальную область действия. Вот пример локальной области:

function x(){
  var y = 1
}
console.log(y) // undefined because y is in the local scope of function x

Вот пример глобальной области видимости:

var a = 1
function sayOne() {
  console.log(a) // prints 1 because the "a" variable is global
}

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

Как показывает ваш снимок экрана, Javascript НЕ имеет области действия на уровне блоков. Таким образом, предоставленный вами код вернет i, несмотря на то, что он находится ВНЕ блока цикла for.

for (var i = 0, i < 10) {
// some code here
}
return i // this will return i since i is global and will not be undefined

Но с блочной областью видимости переменная будет существовать только внутри этого блока кода, например, в циклах. Давайте взглянем на тот же код, но с областью видимости блока ES6 «let», который работает так же, как «var», но имеет область видимости блока.

for (let i = 0, i < 10) {
// some code here
}
return i // this will now return undefined because i is only defined within 
// the for loop
person Austin T    schedule 27.04.2016

До ES5 JS не поддерживает область видимости уровня block. Под block я подразумеваю любой фрагмент кода, заключенный в {}.

Поэтому, если вы пишете тот же код на другом языке блочного уровня, таком как C #, Java, C ++ и т. д., переменная i будет существовать только для области, ограниченной {} цикла for. Вне цикла он был бы недоступен.

Однако в мире JS все немного по-другому, или, лучше сказать, were different до ES6, который позволял block level scopeing использовать ключевое слово let.

Таким образом, приведенный выше код интерпретируется как

var i; // i is declared in the containing scope
for(i = 0; i < 10; i++) {
  ... // some code
}
return i; // therefore accessible here

Если бы это было на уровне блока, i был бы недоступен вне цикла for для возврата.

for(var i = 0; i< 10; i++){

}

return i; // i is not accessible here in block scoped language
person Ravi Tiwari    schedule 27.04.2016