Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему splice не удаляет элемент (https://javascript.ru/forum/misc/73709-pochemu-splice-ne-udalyaet-ehlement.html)

AkezhanOb1 08.05.2018 17:17

Почему splice не удаляет элемент
 
почему когда массив стоит внутри setInterval - a splice не удаляет элемента, а когда выводишь массив как глобальную перемену, все работает идеально?
var check = true

setInterval(function() {
  while(check) {
  var answ = prompt("What would you like to do?")
  var listAll = ["js", "node", "vue"]
  if(answ === "list") {
    listAll.forEach(function(el,pos,arr) {
      console.log(pos + ": " + el)
    })
  }if(answ === "quit"){
    check = false
   }if(answ === "del") {
     let pos = prompt("enter post") 
     listAll.splice(pos, 1)
   }
 }
},2000)


но стоит убрать объявление var listAll = ["js", "node", "vue"] в самое начало то все ок
var check = true
var listAll = ["js", "node", "vue"]
setInterval(function() {
  while(check) {
  var answ = prompt("What would you like to do?")
  if(answ === "list") {
    listAll.forEach(function(el,pos,arr) {
      console.log(pos + ": " + el)
    })
  }if(answ === "quit"){
    check = false
   }if(answ === "del") {
     let pos = prompt("enter post") 
     listAll.splice(pos, 1)
   }
 }
},2000)
Пожалуйста когда выводит prompt впишите с начало list а потом del и номер элемента

Dilettante_Pro 08.05.2018 17:27

AkezhanOb1,
Удаляет, а при следующем проходе в цикле while снова восстанавливается.

AkezhanOb1 08.05.2018 17:39

почему восстанавливает? разве это не ссылочный и мы сразу удаляем с массива а не с его копии?

j0hnik 08.05.2018 17:57

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


Часовой пояс GMT +3, время: 07:54.