js定时器、js函数、变量和参数问题
js定时器
通过使用 JavaScript,我们有能力作到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。
定时器在javascript中的作用
1、制作动画
2、异步操作
定时器类型及语法
setInterval() - 间隔指定的毫秒数不停地执行指定的代码。
setTimeout() - 暂停指定的毫秒数后执行指定的代码 setInterval() 和 setTimeout() 是 Window对象的两个方法。
定时器:
setTimeout 只执行一次的定时器
clearTimeout 关闭只执行一次的定时器
setInterval 反复执行的定时器
clearInterval 关闭反复执行的定时器
var time1 = setTimeout(myalert,2000);
var time2 = setInterval(myalert,2000);
/*
clearTimeout(time1);
clearInterval(time2);
*/
function myalert(){
alert('ok!');
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>定时器</title>
</head>
<body>
<script>
/*
1.单次定时器 setTimeout
格式:setTimeout(回调函数,等待时间(毫秒))
指定等待时间之后执行特定的功能(代码)
只执行一次
清除单词定时器 clearTimeout(要清除的定时器的标识符)
2.循环定时器 setInterval()
格式:setInterval(回调函数,间隔时间(毫秒))
间隔指定时间执行一次特定的代码块
清除定时器: 我们启动定时器之后,会返回一个标识符,通过这个标识符来清除定时器
clearInterval(要清除的多次定时器的标识符)
*/
function demo(){
console.log('定时器执行')
}
// setTimeout(function(){
// console.log('单次定时器启动了')
// },3000)
// setTimeout(demo,3000);
var i=0;
var set=setInterval(function(){
console.log("定时器已经启动");
// i++;
},2000);
console.log(set);
setTimeout(function(){
//清除定时器
console.log("清除定时器启动")
clearInterval(set);
},6000);
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动画</title>
<style>
#item1{
width:50px;
height:50px;
background:green;
}
</style>
</head>
<body>
<div id="item1"></div>
<script>
// 获取元素对象
var oDiv=document.getElementById('item1');
// 启动一个多次定时器 让div的宽度逐渐变大
var i=50;
var set=setInterval(function(){
// 间隔500毫秒 让div的宽度加1
i++;
oDiv.style.width=i+'px';
oDiv.style.height=i+'px';
// 当div的宽高等于200的时候 停止定时器
if(i==200){
clearInterval(set);
}
},33);
</script>
</body>
</html>
js函数
第一种是使用function语句定义函数
function abc(){
alert('abc');
}
第二种是在表达式中定义函数
var 函数名 = function\(参数1,参数2,…\){函数体};
//例如:
//定义
var add = function\(a,b\){
return a+b;
}
//调用函数
document.write\(add\(50,20\)\);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js当中的函数定义方法</title>
</head>
<body>
<script>
// 1.使用function 关键字来定义函数
// 这种方式优先级较高 在那个位置去掉用都没有问题
// 函数不调用不执行
// 调用函数
//demo();
// function demo(){
// alert('函数被调用了');
// }
// 2.在表达时当中定义函数(匿名函数)
// 函数只能在函数体下方去调用
var demo1=function(){
alert('这是匿名函数');
};
console.log(demo1);
demo1()
</script>
</body>
</html>
arguments
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>函数的参数问题</title>
</head>
<body>
<script>
/*
在函数调用的时候,不传实参函数依然可以执行,形参返回undifiend
多穿参数,多余的参数会别省略
在函数内部可以通过arguments这个属性获取所有传进来的参数,类型时数组类型
*/
function demo(a,b){
console.log('函数被调用了');
console.log(arguments);
for(i in arguments){
console.log(arguments[i])
}
}
demo(1,2,3,4);
</script>
</body>
</html>
关于变量和参数问题:
函数外面定义的变量是全局变量,函数内可以直接使用。
在函数内部没有使用var定义的=变量则为全局变量,
*在函数内使用var关键字定义的变量是局部变量,即出了函数外边无法获取。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>变量作用域</title>
</head>
<body>
<script>
/*
全局变量: 在函数外部使用声明的变量是全局变量
局部变量:在函数内部声明的变量是局部变量
如果函数内部有同名的局部变量,那么说内部优先使用局部变量的值
全局变量的作用域发生了改变,变成了局部变量,局部变量的值发生变化不会影响我们的全局变量
在函数内部不使用var声明的变量是全局变量
*/
var a=1;//全局变量
function demo(){
a=6;
var a=0;//局部变量
b=10;
console.log(a);
}
//console.log(a);
demo();
console.log(a);
console.log(b);
</script>
</body>
</html>