Estou aprendendo JavaScript e aprendi recentemente sobre eventos de sincronização de JavaScript. Quando soube setTimeout
da W3Schools , notei uma figura estranha na qual não encontrei antes. Eles estão usando aspas duplas e depois chamam a função
Exemplo:
setTimeout("alertMsg()", 3000);
Eu sei que aspas duplas e simples em JavaScript significa uma string.
Também vi que posso fazer o mesmo assim:
setTimeout(alertMsg, 3000);
Com os parênteses está se referindo, sem os parênteses é copiado. Quando estou usando aspas e parênteses, está ficando louco.
Ficarei feliz se alguém puder me explicar a diferença entre essas três maneiras de usar setTimeout
:
Com os parênteses:
setTimeout("alertMsg()", 3000);
Sem as aspas e os parênteses:
setTimeout(alertMsg, 3000);
E o terceiro está usando apenas aspas:
setTimeout("alertMsg", 3000);
NB: Uma melhor fonte de setTimeout
referência seria MDN .
javascript
settimeout
user1316123
fonte
fonte
mysql_
seguir tecnologias antigas e potencialmente perigosas (como a extensão do PHP) das quais o fluxo de perguntas SO é apenas um exemplo. No IIRC, também houve alguns erros sutis na seção SQL, mas já faz quase um ano desde a última vez que visitei o site e muitos deles podem ser corrigidos. E mesmo se tudo acima fosse perfeito, eu ainda não promoveria um site que tentasse enganar as pessoas com a fraude de seu certificado.Respostas:
Usando
setInterval
ousetTimeout
Você deve passar uma referência a uma função como o primeiro argumento para
setTimeout
orsetInterval
. Esta referência pode estar na forma de:Uma função anônima
Um nome de uma função existente
Uma variável que aponta para uma função existente
Observe que eu defino "variável em uma função" separadamente de "nome da função". Não é aparente que variáveis e nomes de funções ocupem o mesmo espaço para nome e possam se opor.
Passando argumentos
Para chamar uma função e passar parâmetros, você pode chamar a função dentro do retorno de chamada atribuído ao timer:
Existe outro método para passar argumentos para o manipulador, no entanto, ele não é compatível com vários navegadores .
Contexto de retorno de chamada
Por padrão, o contexto do retorno de chamada (o valor de
this
dentro da função chamada pelo timer) quando executado é o objeto globalwindow
. Se você quiser mudar, usebind
.Segurança
Embora seja possível, você não deve passar uma string para
setTimeout
ousetInterval
. Passar uma string tornasetTimeout()
ousetInterval()
usa uma funcionalidade semelhante àeval()
que executa strings como scripts , possibilitando a execução arbitrária e potencialmente prejudicial de scripts.fonte
Eu acho que a função setTimeout que você escreve não está sendo executada. se você usa o jquery, pode fazê-lo funcionar corretamente, fazendo o seguinte:
fonte
Concordo totalmente com Joseph.
Aqui está um violino para testar isso: http://jsfiddle.net/nicocube/63s2s/
No contexto do violino, o argumento string não funciona, na minha opinião, porque a função não está definida no escopo global.
fonte
O que acontece na realidade no caso de você passar a string como o primeiro parâmetro da função
é o valor do primeiro parâmetro avaliado quando é hora de executar (após
number
milissegundos passados). Basicamente, é igual aIsto é
Portanto, as amostras que você se refere não são boas e podem ser fornecidas em diferentes contextos ou apenas erros de digitação.
Se você chamar assim
setTimeout(something, number)
, o primeiro parâmetro não será uma string, mas um ponteiro para algo chamadosomething
. E novamente sesomething
for string - então será avaliado. Mas se for função, a função será executada. amostra jsbinfonte
fonte
Com os parênteses:
Sem as aspas e os parênteses:
E o terceiro está usando apenas aspas:
fonte