键盘点击事件
document.onkeypress=function(ev){
var e=ev||window.event;
console.log(e.keyCode); // 获取所点击的ASC码
}
闭包函数
概念:
密闭的容器,类似 Set、Map 容器
闭包是一个对象,储存数据格式:value:key
形成:
函数嵌套
内部函数引用外部函数的局部变量
特点:
优点:延长外部函数局部变量的生命周期
缺点:容易造成内存泄漏
原因:
fn1 内的变量按理在函数执行完成应该被销毁,但其被 fn1 内 return 的 fn2 所引用,导致始终无法释放内存,所以 fn1 的变量还能保持其状态,这也是大量使用闭包导致内存泄漏的原因
注意点:
合理使用闭包
用完闭包要及时销毁
作用:
1、外部引用局部变量:
function f1() {
let name = 'lucy'
function f2() {
console.log(name);
}
return f2()
}
f1() // lucy
2、封闭作用域——小闭包(自调用,不外调):(function(){})();
避免同名影响
//两个 age 互不影响
(function(){
var age=18;
console.log(age); // 18
})();
(function(){
var age=19;
console.log(age); // 19
})();
3、作用域:由里向外查找,最近原则
优化性能
// 直接从 document 查找不用再上级查找
(function(document){
var test1=document.getElementById('test1');
var test2=document.getElementById('test2');
var test3=document.getElementById('test3');
console.log(test1, test2, test3);// <div id="test1"></div> <div id="test2"></div> <div id="test3"></div>
})(document);
<div id="test1"></div>
<div id="test2"></div>
<div id="test3"></div>
4、参数传递
function test(x){
return function(y){
console.log(x+y);
}
}
test(10)(15);//25
5、闭包节流
function throttle(fn, delay) {
var timer=null;
return function () {
clearInterval(timer);
timer=setInterval(fn,delay);
}
}
window.onresize=throttle(function () {
console.log(1);
},10);