2015-01-29 8 views
2

Я новичок в мире javascript. Читая об области переменных, и я думаю, что у меня есть идея. Я сделал несколько экспериментов, и у меня здесь ситуация, которая дает мне неожиданные результаты. Вот что я имею в видуВидимость переменных Javascript

var x = 0; 

function set(){ 
    x++; 
} 

set(); 
console.log(x) // 1 

На данный момент сценария значение х равно 1, как ожидается,

total = 0; 
var id = setInterval(function(){ 
total++; 
}, 10); 
console.log(total); // 0 

На данный момент сценария значение общей всегда 0. Я проверил и я уверен, что значение total увеличивается. Итак, что случилось со вторым примером и почему значение глобальной переменной не изменилось?

+0

Возможный дубликат [Почему моя переменная неизменна после того, как я изменяю ее внутри функции? - Асинхронная кодовая ссылка] (http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) –

ответ

0

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

чтения https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.setInterval

Итак, здесь-

total = 0; 
var id = setInterval(function(){ 
total++; 
}, 10); 
console.log(total); // 0 

console.log(total); is executed before then the function inside the `setInterval` executes(aftyer a delay of 10ms). 

Вы можете попробовать это

total = 0; 

    var id = setInterval(function(){ 
    total++; 
    console.log(total); 
    }, 10); 

В этом случае общее количество печатается после того, как оно было увеличено

0

Его так называемый скрипт java является асинхронным. console.log будет выполнен первым, и после этого будет выполняться функция внутри setInterval, так как ей была дана 10 миллисекунд задержки ...

Чтобы увидеть увеличенное значение 'total', вы можете запустить приведенный ниже код просто после setInterval.

window.setTimeout(function(){ 
    console.log(total); 
    }, 10); 
Смежные вопросы