Я помещаю функцию setTimeout в массив, когда я console.log (arr), значение arr является целым числом. Может кто-нибудь объяснить это для меня! Благодарность! Код выглядит так:

var arr=[];
arr.push(
 setTimeout(function(){
 $(selector).text(something);
 });
);
console.log(arr); // [2]

Кроме того, я не понимаю, что такое назначение функции в массив! Может ли кто-нибудь помочь мне в этом тоже. Заранее спасибо!

-1
Bo Huang 31 Авг 2017 в 16:33

4 ответа

Лучший ответ

SetTimeout возвращает идентификатор тайм-аута, поэтому, если вы хотите снова остановить этот тайм-аут, вы можете сделать это с помощью clearTimeout (id).

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

Я также не понимаю, почему вы помещаете его в массив, как разработчик, вы должны это знать ....!?

0
Fabian 31 Авг 2017 в 13:38

Проблема заключается в том, что значение, которое вы вводите в массив, является идентификатором таймера, возвращаемым из setTimeout(), который является целым числом. Это не объект jQuery, содержащий входные данные.

Вам нужно изменить свою логику так, чтобы push() находился внутри setTimeout():

var arr = [];
setTimeout(function() {
  arr.push($(selector).text(something));
  console.log(arr);
}, 1000);
2
Rory McCrossan 31 Авг 2017 в 13:35

Я помещаю функцию setTimeout в массив,

Нет, ты не Вы помещаете результат - его возвращаемое значение - вызова функции setTimeout в массив.

Кроме того, я не понимаю, зачем помещать функцию в массив

Например, вам может потребоваться вызвать функцию в зависимости от значения какого-либо индекса, или вы создаете стек или очередь выполняемых операций.

0
Richard 31 Авг 2017 в 13:36

Лучший способ - использовать objects, где вы можете связать функцию с ключом объекта:

var obj={};
obj.testFn = function(){
   setTimeout(function(){
     alert('invoked');
     //$(selector).text(something);
   },2000);
}

obj.testFn();
console.log(obj); 
0
Ankit Agarwal 31 Авг 2017 в 13:36