2015-04-01 3 views
-2

Я новичок в javascript, и я не уверен, что в javascript есть что-то, что называется повторной инициализацией, поэтому, пожалуйста, извините, если такой концепции нет.Что произойдет, если переменная JavaScript будет повторно инициализирована?

Что произойдет, если переменная javascript повторно инициализирована? Ex:

function foo() 
{ 
var x = 10; 
.... //do something 
.... //do something 
.... //do something 
var x = 20; 
console.log("x: " + x); 
} 

Что бы значение х здесь?

+1

Любая причина, вы не можете просто проверить его? – Scimonster

+0

Переменная будет 20. Однако, если вы используете строгий режим, как и следовало ожидать, приведенное выше даст вам сообщение об ошибке. – Nit

+0

Вы можете попробовать это самостоятельно перед публикацией. 2 минуты Google ответят. – Birlla

ответ

2

x будет 20. var «поднят» (см. Ниже), что означает, что переменная объявляется как начало функции, прежде чем запускается любой пошаговый код. Любой инициализатор в операторе var фактически представляет собой оператор присваивания.

Так что ваш код:

function foo() { 
    var x = 10; 
    //do something 
    var x = 20; 
    console.log("x: " + x); 
} 

рассматривается как если бы это было так:

function foo() { 
    var x; 

    x = 10; 
    //do something 
    x = 20; 
    console.log("x: " + x); 
} 

При вызове функции, двигатель JavaScript делает несколько вещей перед тем он начинает выполнять пошаговый код в вопросе. одна из вещей, которые она делает, - это просмотреть код и обработать любые var заявления. (Хотя это называется var заявление, var больше из декларации.)

Это довольно весело, ваш код может быть записан следующим образом:

function foo() { 
    x = 10; 
    //do something 
    x = 20; 
    console.log("x: " + x); 

    return; 

    var x; 
} 

Это все равно будет действительным, и его будет делать то же самое.

больше (в моем блоге): Poor, misunderstood var

ES6 представит let, который ведет себя по-разному (помимо всего прочего, это области видимости блока он находится, в то время как var является областью видимости функции в целом, даже если объявленный в блоке); details on MDN.

+1

Downvoter: Что мне здесь не хватает? –

0

Ключевое слово var по существу просто определяет область действия переменной и обрабатывается до того, как какой-либо из кода фактически выполняется (посмотрите вверх «подъем»). Использование var дважды для переменной избыточно, но на самом деле ничего не делает в частности. В конце вы просто назначаете 10 в x, а затем назначаете 20 на x; ни больше ни меньше.

-1

Вы всегда можете запустить простой тест, чтобы проверить это. var означает, что эта переменная находится в текущей области. Таким образом, в вашем примере x будет равна 20

var x = 10; 
 
var x = 20; 
 
var y = 10; 
 

 
function Test() { 
 
    var x = 30; 
 
    y = 20; 
 
    alert('X in function: ' + x); 
 
    alert('Y is global, so it\'s ' + y); 
 
} 
 

 
Test(); 
 
alert('X outside of function: ' + x + ', also Y = ' + y);

+0

Downvoter: Что здесь несут Юстины? Или кто-то просто беспорядочно аннулирует ответы на этот вопрос? –

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