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 1The 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() { })
}
})