2017-01-11 12 views
0

Я читаю несколько книг, изучая javascript, и я вижу, что javascript использует лексическую область.У меня проблемы с лексической областью в javascript

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

Я пробовал некоторый простой пример:

function f() { 
    console.log(x); 
} 
const x = 10; 
f(); // 10 

Тогда как это работает и почему оно регистрирует значение 10? Переменная x не существует, когда я определяю функцию. Я javascript noob, так что, возможно, я что-то пропустил. Заранее спасибо.

+0

Check [это видео] (https://www.youtube.com/watch?v=ByG-RU5fCcQ&t=52s) 6: 50. Он прекрасно описывает лексический охват. Я нашел это полезным. –

ответ

0

Это связано с концепцией под названием Подъем. По существу, любое объявление перемещается в начало области и, следовательно, всегда доступно в любом месте области.

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

сообщение, которое х присваивается 10.

Read more about hoisting in JS here. (JavaScriptisSexy.com) More specifically about Hoisting and const here.

+0

Здесь нет несущественного подъема (и присвоение не поднимается выше объявления функции). Использование операторов присваивания никогда не поднимается. Ключевое слово 'const' (в отличие от' var') также не поднимается. – Quentin

+0

Ссылка, однако. –

+0

Re edit: Нет. Операции 'const' не поднимаются. [This] (http://jsbin.com/cogubon/1/edit?js,console) выдает опорную ошибку, потому что 'const' не поднимается. [This] (http://jsbin.com/cogubon/2/edit?js,console) выдает синтаксическую ошибку, потому что вы не можете иметь константу без присвоения ей значения (или присвоить ей значение позже) – Quentin

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

  • Нет связанных вопросов^_^