Pergunta

Duas perguntas:

  1. Como é o valor retornado de setInterval e setTimeout (aqueles usados ??para limpar os temporizadores) calculado?

  2. É possível que ambas as funções para retornar o mesmo valor durante a execução? Por exemplo:

    var a = setInterval(fn1, 1000);
    var b = setTimeout(fn2, 1000);

É possível que a e b ter o mesmo valor?

O primeiro é mais uma questão para-meu-conhecimento, mas a segunda é mais importante.

Foi útil?

Solução

Retorna um valor que pode ser usado para cancelar o temporizador . Assim, parece improvável que eles retornam o mesmo valor (a menos que eles estão reutilizando valores e um dos temporizadores já foi cancelada)

Mozilla afirma que o nível DOM 0, mas não faz parte da especificação. (olhar na parte inferior da página)

Eu tenho uma referência ainda melhor:

Nabble diz:

SetTimeout e setInterval são de a especificação original Javascript, pré-ECMA. Essa especificação não é oficialmente padronizado em qualquer lugar, mas é suportado por todos os navegadores web e a maioria das implementações do linguagem Javascript. (Incluindo ActionScript.)

As especificações pré-ECMA são muitas vezes conhecido como os "DOM-0" APIs. Uma vez que eles têm Nunca foi padronizado antes, faz sentido para HTML5 para finalmente especificação APIs não preterido na tentativa para fornecer um ambiente consistente navegadores de todo. Especialmente quando os acontecimentos recentes têm demonstrado que há são empresas que gostam de implementar a letra da norma, mas não o espírito.

Leia o original especificação aqui , ou a partir de Sun (que era um endossante precoce de JavaScript).

Outras dicas

Testado isso sob Opera 9, Safari 3, Firefox 3 e IE 7.

Tudo voltou inteiro valores, começando em 1 e, em seguida, incrementos de 1 para cada chamada para setTimeOut() e setInterval(). No entanto, notei que os navegadores começaram os contadores e tratadas de forma diferente:

  • IE começou com um número (aparentemente) aleatória de 6 dígitos, mas as chamadas subsequentes para qualquer função incrementado este número. Depois de fechar e reabrir IE descobri que o número inicial parecia ser gerados aleatoriamente, como era nem de longe a contagem a partir da sessão anterior.
  • Opera mantém um contador para cada guia -. Fechar uma aba e abrir um novo começou o contador de 1 na nova guia
  • No Safari, a contagem foi global - abrir uma nova aba e chamando as funções em diferentes abas parecia incrementar um contador de referência mundial
  • .
  • No Firefox, o contador apareceu para começar às 2 e incrementado a cada chamada subsequente para qualquer função. Como o Opera, cada guia teve o seu próprio valor do contador, mas eles apareceu a toda início a 2.

Observe, porém, que em todos os cenários, há dois identificadores (pelo menos na mesma guia) são os mesmos.

Eu acho que não é um comportamento padronizada. No Firefox, é apenas inteiro, incrementando em cada chamada de setTimeout ou setInterval. E, não, eles não podem ter o mesmo valor.

A partir do site da Mozilla:

intervalID é um ID intervalo único que você pode passar para clearInterval ().

Por isso, é única:)

Se eles podem ter o mesmo valor depende da implementação JavaScript. Como Maciej mencionado no Firefox eles não podem ter o mesmo valor que o mesmo contador é usado. No entanto, isso pode ser diferente em outros navegadores, por isso talvez seja melhor não contar com eles nunca ter o mesmo valor.

Parece-me que o valor devolvido é o valor do índice para qualquer lista internamente mantida de temporizadores / intervalos eles estão mantendo.

Como no ponto, eu chamei clearInterval (18) em vez de clearInterval (var_returned_from_set) e ele parou o desejado temporizador / intervalo. (Testado FF17.0.1 e IE9.0.8)

Também no meu próprio teste eles parecem ser exclusivo para o tempo de vida da página para ambos os navegadores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top