2016-02-03 2 views
2

Вопрос: Что бы утешатьсяconsole.log() не работает, как ожидалось

var foo = 'outside'; 

function logIt() { 
    console.log(foo); 
    var foo = 'inside'; 
} 

logIt(); 

Ответ: undefined

Может кто-то объяснить, почему это происходит.

+0

Поскольку 'foo' также определяется в области' logIt' и поднимается вверх. –

ответ

4

var заявления подняты.

Внутри функции имеется только одна переменная: одна создана на линии var foo = 'inside';.

Когда вы регистрируете его значение, вы делаете это до выполнения назначения, поэтому оно равно undefined.

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

+0

Именно поэтому я уверен, что правильно понимаю это - функция, которую он написал, такая же: function logIt() {var foo; console.log (Foo); foo = "внутри"; } – millerbr

+1

@millerbr - Для всех практических целей. Да. – Quentin

+0

Спасибо @Quentin – user3516328

3
var foo = 'outside'; 

function logIt() { 
    var foo; 
    console.log(foo); 
    foo = 'inside'; 
} 

logIt(); 

Это как сценарий interpreted.So дает undefined

Это называется top-hoisting.

В этом случае повторного декларации foo это произойдет, которые установить его на undefined

0
var foo = 'outside'; 

function logIt() { 
    console.log(window.foo); 
    var foo = 'inside'; 
} 
logIt(); 

функция логит предполагает, что foo находится внутри его объема. Чтобы использовать глобальную переменную, вам необходимо использовать window.variable_name