2014-09-28 2 views
0

У меня есть массив, который объявлен в верхней части моего приложения:Изменяет массивы в нескольких функциях плохой практики?

var arr = [1,2,3,4] 

И у меня есть два метода, работающие в фоновом режиме.

Метод 1

Array.prototype.numberOfCoolElements = function(){ 
      doSomethings(); 
      doOtherThings(); 

      // meantime, the method2 will be called 

      return this.length; 
} 

Метод 2

Array.prototype.changeTheLength = function(){ 
      this[100] = 123; 
} 

Если я бегу оба метода на двух функций асинхронными с одной и той же ссылки на массив:

Можно ли на длине функция будет изменена после вызова numberOfCoolElements и до ее завершения?

+1

Нет, javascript однопоточный. – cgTag

+1

Это зависит от того, какое действие async завершается первым, перед изменением массива –

+0

Если я запускаю оба в одно и то же время, в двух функциях async, возможно, чтобы changeLength будет завершена непосредственно перед возвратом числаOfCoolElements? – 2014-09-28 12:51:38

ответ

4

Нет, это невозможно, поскольку JavaScript имеет семантику выполнения до завершения. Больше информации здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/EventLoop.

Соответствующая цитата:

Это дает некоторые интересные свойства при рассуждении о вашей программе, в том числе тот факт, что всякий раз, когда запускается функция, она не может быть упреждающий и будет работать полностью перед запуском любого другого кода (и могут модифицировать данные, которыми манипулирует функция)

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