<script>
函数会形成局部作用域(作用于区域)
全局变量: 在任何地方都可以访问 持久保持
局部变量: 只能在函数内部访问 在函数执行结束后 局部变量就会被浏览器收回,销毁。
function fn(){
var x = 10;
console.log(x);
}
fn();
console.log(x); // x is not defined
函数的作用域是在定义函数时确定的,与在哪调用无关
function fn(){
var x =10;
fn2
}
function fn2(){
console.log(x); // x is not defined
}
fn()
function fn1(){
var x = 10;
console.log(x);//?10
fn2()
}
var x = 20;
function fn2(){
console.log(x);//?20
}
fn1();
function fn(a,b){ //a,b 形参也属于局部变量
return a+b;
}
var res = fn(10,20);
// console.log(a,b);
</script>
闭包
// 闭包: 闭包就是一个函数 一个作用域可以访问另外一个函数内部的局部变量,局部变量所在的函数就是闭包函数。
// 闭包的作用:可以让变量持久保存, 延伸了变量的作用范围
function fun1 (){
var x =10;
function fun2(){
console.log(x);
};
return fun2;
}
var f =fun1();
f();
fun1()();
// function fun1(){
// var x =10;
// }
// var f = function(){
// console.log(x);
// }
// f();
递归函数
// 递归函数 : 函数内部自己调用自己
// 递归函数的作用:循环效果
// 注意: 递归函数内部一定要有退出函数
// 死递归
// function fn(){
// console.log('hello');
// fn();
// }
// fn()
var num = 0
function fn1(){
console.log(num);
num++;
if (num>9) { //退出条件
return;
}
fn1()
}
fn1()
4月27日
定时器和计时器
<body>
<button id="btn">关闭</button>
</body>
<script>
var btn = document.querySelector('#btn')
//定时器 延迟执行操作 单位 毫秒
var timer1 = setTimeout(function(){
alert('hello');
},5000)
btn.onclick =function(){
// 关闭定时器
clearTimeout(timer1)
}
//计时器 间隔执行 单位 毫秒
var x = 0 ;
var timer2 =setInterval(function(){
console.log(x+=1);
// 关闭计时器
btn.onclick =function(){
// 关闭定时器
clearInterval(timer2)
}
},1000)
</script>
节流
<body>
<button id="btn">按钮</button>
</body>
<script>
var btn = document.querySelector('#btn');
// 节流:固定时间内,多次操作以第一次为准(只执行第一次操作)
//固定时间内不能触发第二次
var flag = true; //节流阀
btn.onclick = function(){
if (flag == true) {
flag = false;
console.log('发送请求');
setTimeout(function(){
flag= true; //一秒后打开节流阀
},1000)
}
}
</script>