2013-12-21 4 views
1

Когда функция или процесс обновляет глобальный массив, есть ли вероятность несогласованности, в то время как другой процесс пытается получить доступ к одному и тому же массиву в javascript тем временем? Если да, существует ли какой-либо механизм предотвращения, похожий на операционную систему, при попытке доступа к файлу или СУБД во время транзакции и т. Д.? Например: функция fun1 работает каждые 10 секунд & fun2 запускается нажатием кнопки:Несоответствие в глобальном массиве в javascript

<script> 
a = new Array(); //a is global 
setInterval(fun1,10000); 
function fun2() 
{ 
    for(var j=0;j<1000;j++) 
    { 
     a[j]=j; 
    } 
} 
function fun1() 
{ 
    for(var i=0;i<1000;i++) 
    { 
     a[i]=i+1; 
    } 
} 
</script> 
<input type="button" value="Update Array" onclick="fun2()"> 

Приведенный выше код представляет собой образец для демонстрации this.Merely нажатие кнопки не имеет никакого смысла в этом контексте, как только время - важный вопрос. Я только хочу знать факт, или у javascript есть какая-либо функция, чтобы предотвратить доступ к элементам массива какой-либо другой функцией до тех пор, пока все элементы не будут полностью обновлены. Извините, если я задам глупый вопрос!

+1

JavaScript однопоточный, другого сценария не работает в то же время – Bergi

+0

сказать, e = document.getElementsByTagName ('span «); Этот глобальный e хранит ссылку на все элементы span в документе. Если я добавлю динамически (AJAX) еще один диапазон, то длина e.length увеличивается на 1. @ Bergi – rosemary

+0

продолжение формы выше: также у меня есть функция, которая собирает значения (i = 0; i rosemary

ответ

1

Javascript не является многопоточным. Так что все, что вы делаете, происходит последовательно. Независимо от того, является ли это функцией или нет, это возможно, но это предотвращает запись из двух разных процессов :)

+0

setTimeout и setInterval не всегда выполняют свой код ровно через X миллисекунды, потому что, по моему мнению, вызовы ставятся в очередь и выполняются после того, как код был выполнен через X секунд после завершения. –

+0

- это то же самое, что и с переменной в javascript? @Lex Podgorny – rosemary

+0

Что вы имеете в виду? –

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