2016-05-03 4 views
2

Я понимаю, что все переменные подняты, но присваивания не являются (не забывайте о функциях для этого вопроса - это имеет смысл для меня - related SO).Каково значение переменной подъема?

Но я не вижу, как это влияет на код. Я написал сценарий для экспериментов.

В чем преимущество, если вы поднимите переменную и присвоите ей значение неопределенного, которое, по-видимому, имеет место.

var a = 1; 

function foo (proxy){ 
    print(proxy); 
} 

function print(out){ 
    document.getElementById("out").innerHTML = out; 
} 

// foo("you") 

print(d); // undefined 

var d = 4; 

print(d); // 4 

https://jsfiddle.net/6ue7052k/1/

+0

Удалите 'var' перед' d', и первый вызов печати выдает исключение. –

+0

Почему этот вопрос был вновь открыт? Это явный дубликат [Почему переменные hoist для JavaScript?] (Http://stackoverflow.com/questions/15005098/why-does-javascript-hoist-variables) –

+1

@squint Это, похоже, действительно не было полным дубликатом мне. Почему он поднимает их, это другой вопрос, как он влияет на код. – Paulpro

ответ

2

Вот один из способов это может повлиять на результат:

function outer () { 

    var a = 'foo'; 

    function inner () { 
     console.log(a); 
     var a = 'bar'; 
    } 

    inner(); 

}; 

без грузоподъемных outer() будет выводить 'foo', а потому, что местная var a декларация поднято, она выводит undefined вместо этого. Это не очень полезно, но это показывает, что это может иметь эффект.

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

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

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