一、回调函数
1.什么是回调
回调(callback):把一个函数作为一个参数传到一个主函数里面,当主函数执行完之后,再执行传进去的那个函数,这个过程就叫回调;作为参数的那个函数就叫回调函数
<script>
var fn = function() {
console.log("我是回调函数");
}
function main(callback) {
console.log("我是主函数");
setTimeout(() => {
callback();
}, 2000);
}
// main(fn);
var hasMask = function () {
console.log("口罩到货,速速来购!");
}
function buyMask(myfn) {
console.log("去药店买口罩,都没货了,留了一个号码,有货call me");
setTimeout(() => {
myfn();
}, 3000);
}
buyMask(hasMask);
</script>
七、作用域
1.什么是作用域
一条数据起作用的范围
2.全局作用域
声明在任何函数函数以外的数据,拥有全局作用域
全局作用域的数据,在网页的任何地方都能使用,只有页面关闭后才会被删除
3.局部作用域
函数的作用域就是局部作用域
局部作用域的数据,只能在函数内部访问和修改,且在函数运行之后被立即删除
局部作用域的数据
函数内使用var或let声明的变量
函数内的函数
函数的形参
var str = "hello";
document.write(str);
function name(){
var str2 = "hello2!"
}
// name();
// console.log(str2);//报错
// function fn(a){
// alert(a)
// }
// fn(100);//100
// console.log(a);//报错
// function fn2(){
// var fn3 = function(){
// console.log("OK");
// }
// }
// fn2();
// fn3();//报错
function fn4(){
return function fn5(){
console.log("OK");
}
}
fn4()();
// fn5();
// fn5();//报错
// function fn6(){
// num = 100;
// }
// fn6();
// console.log(num);//100
八、作用域链
当我们调用一条数据的时候,会先在本作用域查找,如果找不到就向上查找父作用域,如果还是没找到,就继续往上,一直找到全局作用域,还是找不到就报错
九、闭包
在父函数内部,创建另一个函数,通过另一个函数访问这个父函数的局部变量
var authorName = "山边小溪";
function doSomething(){
var blogName = "梦想天空";
function innerSay(){
alert(blogName);
}
return innerSay;
}
var myfn = doSomething();
myfn();
1.闭包的用途
可以读取函数内部的变量
让这些变量的值始终保持在内存中
2.闭包的缺点
闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露
闭包会在父函数外部,改变父函数内部变量的值