闭包
闭包指有权访问另一个函数作用域中变量的函数。
函数套函数,内部函数访问外部函数变量,必须return,从而避免了变量被销毁
//这个例子中,闭包就是fn()函数
function fn(){
var num=1;
function fun(){
console.log(num);
}
return fun;
}
有些人可能会问到,既然闭包这么麻烦,为什么不使用全局变量呢?是因为这种临时变量如果大量在全局中,会影响访问速度。如果有一个处理过程很耗时的函数,我们就要先将计算出的值存储起来,当调用这个函数时,会先在缓存中查找,找不到才会进行计算并更新缓存。闭包可以做到这一点,因为他不会释放外部的引用,从而函数内部的值得以保留。
闭包demo
点击小li输出索引
传统操作
//1.利用动态添加属性的方式
var lis =document.querySelector('.nav').querySelectorAll('li')
for(var i=0;i<lis.length;i++){
lis[i].index=i;
lis[i].onclick = function(){
// console.log(i);//不用自定义属性index,输出的都是4,因为内部访问不到