function f() { var i=5; k=7; } f(); alert(k); В примере выдается результат k=7, однако, хоть переменная и не объявлена, она внутри функции, т.е. локальная и не должна быть видима, или вторая и последующие все-таки становятся глобальными? |
Программируем свойства окна браузера
Методы focus() и blur()
Метод focus() применяется для передачи фокуса в окно, с которым он использовался. Передача фокуса полезна как при открытии окна, так и при его закрытии, не говоря уже о случаях, когда нужно выбирать окна. Рассмотрим пример.
Открываем окно и, не закрывая его, снова откроем окно с таким же именем, но с другим текстом. Новое окно не появилось поверх основного окна, так как фокус ему не был передан. Теперь повторим открытие окна, но уже с передачей фокуса:
<HTML> <HEAD> <SCRIPT> function myfocus(a) { myWin = window.open('','example','width=300,height=200'); // открываем окно и заводим переменную с указателем на него. // Если окно с именем 'example' существует, то новое окно не создается, // а открывается поток для записи в имеющееся окно с именем 'example' if(a==1) { myWin.document.open(); //открываем поток ввода в уже созданное окно myWin.document.write('<H1>Открыли окно в первый раз'); //Пишем в этот поток } if(a==2) { myWin.document.open(); myWin.document.write('<H1>Открыли окно во второй раз'); } if(a==3) { myWin.focus(); // передаем фокус, а затем выполняем те же действия, // что и в предыдущем случае myWin.document.open(); myWin.document.write('<H1>Открыли окно в третий раз'); } myWin.document.write('</H1>'); myWin.document.close(); } </SCRIPT> </HEAD> <BODY> <a href="javascript:myfocus(1);">Откроем окно и напишем в него что-то</a>, <BR><BR> <a href="javascript:myfocus(2);">напишем в него же что-то другое, но фокус не передадим</a>, <BR><BR> <a href="javascript:myfocus(3);">опять что-то напишем в него, но сперва передав ему фокус</a>. </BODY> </HTML>4.1. Передача фокуса в новое окно
Поскольку мы пишем содержание нового окна из окна старого (родителя), то в качестве указателя на объект используем значение переменной myWin.
Чтобы увести фокус из определенного окна myWin, необходимо применить метод myWin.blur(). Например, чтобы увести фокус с текущего окна, где выполняется скрипт, нужно вызвать window.blur(). Эффект будет тот же, как если бы пользователь сам свернул окно нажатием кнопки в правом верхнем углу окна.
Метод setTimeout()
Метод setTimeout() используется для создания нового потока вычислений, исполнение которого откладывается на время (в миллисекундах), указанное вторым аргументом:
idt = setTimeout("JavaScript_код",Time);
Типичное применение этой функции - организация периодического изменения свойств объектов. Например, можно запустить часы в поле формы:
<HTML><HEAD><SCRIPT> var Chasy_idut=false; function myclock() { if(Chasy_idut) { d = new Date(); document.f.c.value = d.getHours()+':'+ d.getMinutes()+':'+ d.getSeconds(); } setTimeout("myclock();",500); } function FlipFlag() { Chasy_idut = !Chasy_idut; document.f.b.value = (Chasy_idut)? 'Остановить' : 'Запустить'; } </SCRIPT></HEAD> <BODY onLoad="myclock();"> <FORM NAME=f> Текущее время:<INPUT NAME=c size=8> <INPUT TYPE=button name=b VALUE="Запустить" onClick="FlipFlag();"> </FORM></BODY></HTML>4.2. Часы с использованием setTimeout()
Обратите внимание, что поток порождается (т.е. вызывается setTimeout() ) всегда, даже в том случае, когда мы остановили показ часов. Если бы он создавался только при значении переменной Chasy_idut = true, то часы бы просто не запустились, так как в самом начале исполнения скрипта мы установили var Chasy_idut = false. Но даже если бы мы установили в начале var Chasy_idut = true, то часы бы запустились при загрузке страницы, а после остановки поток бы исчез, и при последующем нажатии кнопки "Запустить" часы продолжали бы стоять.
Метод clearTimeout()
Метод clearTimeout() позволяет уничтожить поток, вызванный методом setTimeout() . Очевидно, что его применение позволяет более эффективно распределять ресурсы вычислительной установки. Для того чтобы использовать этот метод в примере с часами, нам нужно модифицировать функции и форму:
<HTML><HEAD><SCRIPT> var Chasy_idut=false; var potok; function StartClock() { d = new Date(); document.f.c.value = d.getHours()+':'+ d.getMinutes()+':'+ d.getSeconds(); potok = setTimeout('StartClock();',500); Chasy_idut=true; } function StopClock() { clearTimeout(potok); Chasy_idut=false; } </SCRIPT></HEAD><BODY> <FORM NAME=f> Текущее время:<INPUT NAME=c size=8> <INPUT TYPE=button VALUE="Запустить" onClick="if(!Chasy_idut) StartClock();"> <INPUT TYPE=button VALUE="Остановить" onClick="if(Chasy_idut) StopClock();"> </FORM></BODY></HTML>4.3. Часы с использованием setTimeout() и clearTimeout()
В данном примере для остановки часов используется метод clearTimeout(). При этом, чтобы не порождалось множество потоков, проверяется значение указателя на объект потока.
Методы setInterval() и clearInterval()
В предыдущих примерах для того, чтобы поток запускался снова и снова, мы помещали в функцию в качестве последнего оператора вызов метода setTimeout(). Однако в JavaScript для этих целей имеются специальные методы. Метод setInterval("код_JavaScript",time) выполняет код_JavaScript с периодом раз в time миллисекунд. Возвращаемое значение - ссылка на созданный поток. Чтобы остановить поток, необходимо вызвать метод clearInterval(поток).