/ / javascript setTimeout element szczegółowy [zamknięty] - javascript, settimeout

javascript setTimeout item szczegółowy [closed] - javascript, settimeout

Jestem nowy w javascript. Czy ktoś może mi pomóc wyjaśnić funkcję setTimeout. Oto mój akapit kodu.

<script>
$(function(){
var djs ;
function autoFunction(){


var value = $("p").html();

value =parseInt(value);
value  = value - 1 ;
if(value  >= 0){

$("p").html(value);
//this works
djs = setTimeout(autoFunction ,1000);

//this don"t work
// djs = setTimeout("autoFunction()",1000);
//this work but not I want
//djs = setTimeout(autoFunction(),1000);

}else{
alert(1);
clearTimeout(djs);
}

};
autoFunction();
})
</script>

Używam jquery-1.9.0 i Chrome. Wersja Chrome to 33.0.1750.146. I przepraszam, że nie mogę komentować ciebie, ponieważ strona nie może załadować jquery z google.

Odpowiedzi:

-1 dla odpowiedzi nr 1

The setTimeout funkcja wywoła autoFunction po 1000 milisekundach.

Powodem, dla którego nie działa z (), jest argument do setTimeout będzie wynikiem autoFunction() zamiast odniesienia do rzeczywistej funkcji. Po 1000 ms, cokolwiek przekażesz jako pierwszy argument, zostanie wykonane, dlatego musi być odwołaniem do funkcji - nie wynikiem.

Otwórz konsolę i wpisz „autoFunction” ikonsola wydrukuje ten javascript. Ale wpisz „autoFunction ()”, a konsola wykona tę funkcję. Pomyśl o „autoFunction” jak o zmiennej, która zawiera funkcję zamiast wartości.

Oto kilka przypadków testowych:

 func1 = function() {
console.log("Function 1");
}

setTimeout(func1, 1000); // <-- delays 1 seconds
setTimeout(func1(), 1000); // <-- no delay, as func1() executes immediately
setTimeout("func1()", 1000); // <-- delays 1 second, via the "code" option for setTimeout, so long as it"s in scope.

Według komentarza @RobG, pewne wyjaśnienie zakresu:

 $(function(){
func2 = function() { // <-- note the declaration here.  Function stored in a var.
setTimeout("func2()", 1000);
// works, because "func2" exists in the global scope, where setTimeout lives
}

function func3() {
setTimeout("func3()", 1000);
// fails, because func3 only exists within this $(function() { })
}
})