Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   setTimeout и область видимости (https://javascript.ru/forum/misc/61337-settimeout-i-oblast-vidimosti.html)

s24344 13.02.2016 19:08

setTimeout и область видимости
 
Здравствуйте. Подскажите, пожалуйста ответы на следующие вопросы.
Первый: Почему в данном примере, если использовать переменную degrees не как глобальную, а как локальную в контексте функции, то код работать не будет?
Второй: Какой из вариантов, с точки зрения оформления и синтаксиса корректнее (setTimeout)
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title></title>
	<style>
		#image {
			width: 200px;
			height: 200px;
			background: #359FBC;
			margin: 80px auto;
		}
		h2 {
			width: 200px;
		}
	</style>
</head>
<body>
	<div id="image"></div>
	<h2 id="status"></h2>

<script src="main.js"></script>
</body>
</html>


var looper;
var degrees = 0;

function rotateAnimation(el, speed) {
    // var degrees = 0;
    
    var elem = document.getElementById(el);

    elem.style.WebkitTransform = "rotate("+degrees+"deg)";
  
    // setTimeout('rotateAnimation(\''+el+'\','+speed+')',speed);

    setTimeout(function() {
        rotateAnimation(el, speed);
    }, 30);

    degrees++;

    if (degrees > 359) {
        degrees = 1;
    }

    document.getElementById("status").innerHTML = "rotate("+degrees+"deg)";
}

rotateAnimation("image", 30);

рони 13.02.2016 19:19

Цитата:

Сообщение от s24344
как локальную в контексте функции, то код работать не будет?

потому что переменная будет каждый раз создаваться заново

s24344 14.02.2016 07:33

Спасибо

s24344 14.02.2016 07:34

На счет второго вопроса, не скажите своего мнения?

hhh 14.02.2016 16:37

s24344,
Эта функция сама себя вызывает из-за метода setTimeout? Какую главу на эту тем почитать?

GayCoder 17.02.2016 03:43

vanished

Deff 17.02.2016 04:25

Цитата:

Сообщение от s24344
На счет второго вопроса, не скажите своего мнения?

setTimeout c функцией удобнее в случаях передачи своей переменной из родительской функции, в контенте которой она запускается, либо сложная или многострочная обработка аргументов внутри setTimeout.


Часовой пояс GMT +3, время: 19:08.