Sintax setInterval

estava lendo sobre setInterval, e fiquei com duvido quanto a sintex, o codigo é o seguinte

[code][/code]
porque dessa forma funciona

e dessa nao

setInterval(myTimer(),1000); nao funciona??

porque no meu entendimento é a mesma coisa, mas pq nao funciona?
abraço

O primeiro parâmetro da setInterval deve ser uma function.

No primeiro caso, você está passando uma function anônima, que funciona normal.

No segundo você está passando o resultado da função myTimer, que não retorna nada (portanto undefined).
A diferença está nos parenteses após o nome da função.
Quando você põe () você está executando a função.

Para funcionar, poderia fazer assim:

  setInterval( myTimer, 1000 ); // sem () no final de myTimer

Apenas um porém… talvez tenha que colocar a chamada dessa função setInterval, após definir a função em si.
Não tenho certeza se na ordem que está agora funcionará.

Realmente, boa observação AbelBueno, o ideal seria declarar a função primeiro e após declarar o setInterval(), até porque deixa o código mais explicativo.

yschmitzz, apenas complementanto a dica, quanto a variável myVar que você declarou, se de repente você quiser parar o setInterval ela serve pra isso:

clearInterval(myVar);

Espero ter ajudado.

valeu pessoa, realmente ajudou muito, só na epoca que eu estava estudando C# nao lembro de ter esse detalhe dos parenteses, mas valeu mesmo

po, bateu outra duvida com a sintax, tem o metodo toggle
utilizando ele reparei que tem as mesmas caracteristicas, quando inicia diretamente nos parameto ele fica repitindo varias vezes, mas quando chama só o comando ele exibe uma vez, nao consegui intender

olha o codigo

[code]

Toggle

This is a paragraph with little content.

This is another small paragraph.

This is another small paragraph.

This is another small paragraph.

This is another small paragraph.

[/code]

Pelo que entendi da sua lógica, vou fazer uma comparação:

Dessa forma:

$("p").toggle(1000,alert(Apagado"));

Ao jQuery você disse: Faça todos os elementos p serem ocultados e me informe quando acabar

E dessa forma:

$("p").toggle(1000,function() {alert(Apagado")});

Ao jQuery você disse: Faça cada elemento p ser ocultado e me informe quando acabar.

Ambas as formas executam um loop internamente, afinal ele precisa percorrer cada elemento p que encontrar, o que muda é a forma como monitoramos esse retorno (alert()).

Ao invés de você utilizar um alert() para testar, pode simplesmente fazer:

$("p").toggle('slow');

Assim você verá que o jquery executa o que você pediu sem precisar te responder cada item que ele fizer.

Clareou mais as idéias?

Espero ter ajudado.

ajudou sim, valeu
só meio que to na decoreba ainda, nao ta entrando na minha cabeça que tem uma diferença entre declarar a função dentro do parametro e nao declarar
porque, pra mim essa situação é a mesma que essa

function exemplo() {
	var x =0;
	for (x;x<5;x++); //declarado fora do elemento for
		document.getElementById("p1").innerHTML=x;

	for (var y=0;y<5;y++); //declarando dentro do elemento for
		document.getElementById("p2").innerHTML=y;


}

pode ver que nao tem diferença, pra mim é a mesma coisa, mas isso vai ter que entrar na cabeça :stuck_out_tongue:

Opa, foi mal, postei 2 vezes sem querer

[quote=yschmitzz]ajudou sim, valeu
só meio que to na decoreba ainda, nao ta entrando na minha cabeça que tem uma diferença entre declarar a função dentro do parametro e nao declarar
porque, pra mim essa situação é a mesma que essa

function exemplo() {
	var x =0;
	for (x;x&lt;5;x++); //declarado fora do elemento for
		document.getElementById(&quot;p1&quot;).innerHTML=x;

	for (var y=0;y&lt;5;y++); //declarando dentro do elemento for
		document.getElementById(&quot;p2&quot;).innerHTML=y;


}

pode ver que nao tem diferença, pra mim é a mesma coisa, mas isso vai ter que entrar na cabeça :p[/quote]

Na verdade isso parece ser a mesma coisa, mas realmente não é, vamos tentar usar o exemplo 1:

var x =0;
for (x;x&lt;5;x++); // observe o ponto e virgula que você colocou
document.getElementById(&quot;p1&quot;).innerHTML= x; // aqui x vale 4 correto

Nesse exemplo você declarou o x antes do laço e ele será acessível tanto dentro do laço (x++), quanto fora (innerHTML = x)

Já no segundo caso:

for (var y=0;y&lt;5;y++); // observe novamente o ponto e virgula que voce colocou aqui também
document.getElementById(&quot;p2&quot;).innerHTML= y; // pela lógica, y não seria acessível, pois foi declarado dentro do laço

Percebeu como começam a mudar as coisas?

Isso tecnicamente chamamos de regra de escopo (onde a variável pode ser alcançada).

Concorda comigo que se eu declarei uma variável dentro do laço, ela não poderia ser acessada por mais ninguém fora dele?

Daí você me pergunta, mas como y atribuiu 4 da mesma forma que x?

Eu te respondo, mistérios da meia noite! rsrsrs, bemvindo as pegadinhas da programação web.

Brincadeiras à parte, aconselho você sempre testar seu código em mais de um navegador, dessa forma alguns podem deixar o y passar, outros não e assim você vai se familiarizando com o que cada ambiente faz.

Os navegadores atuais possuem um mecanismo de debug (chamado console) e com ele você consegue visualizar os erros que podem acontecer como "y is undefined" ou "y is not declared" e assim por diante.

Espero ter ajudado.