2013-07-29 7 views
4

В следующем примере JavaScript, кажется, полностью игнорирует мой оператор return и просто выполняет исполняемый код.Выполнение кода JavaScript после возврата

var x = 1; 
(function() { 
    x = 2; 
    return; 
    var x = 3; 
})(); 
console.log(x); // Outputs 1 in both Chrome and FF 

Несомненно, код должен выводить 2? Если я удалю ключевое слово var с var x = 3, он выдает 2, как и ожидалось. Существует ли какая-то странная оптимизация компилятора?

+0

Я думаю, что 'x' отличается внутри функции. Простое исправление должно было бы сделать' window.x = 2' – Madushan

+1

Как @dystroy упомянутые объявления переменных поднимаются в верхней части области функций. Так как у вас есть var x = 3, var x get поднимается вверх и делает x = 2 локальной переменной. Если вы просто положили x = 3 (без var), то console.log выведет 2 –

ответ

8

Нет, код должен не выход 2, поскольку переменные декларации водрузили поэтому ваш код эквивалентен

var x = 1; 
(function() { 
    var x; 
    x = 2; // changes the internal x variable 
    return; 
    x = 3; // does nothing because it's not reached 
})(); 
console.log(x); // Outputs the outside x, which is still 1 

Линия

x = 2; 

только изменяет внутреннюю x переменную, которая Shadows снаружи один.

Объем не глобальной переменной - это вся функция, в которой она объявлена. С самого начала этой функции до ее конца.

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