闭包 详细解释与举例2

---------------------------------------------------闭包 详细解释与举例2------------------------------------------------------------

应用
循环中的异步
循环绑定事件

var ali = document.querySelectorAll("li");
for(var i=0;i<ali.length;i++){
    (function(index){                                    //每循环一次 执行一次匿名函数
        ali[index].onclick = function(){             //索引用参数传递 匿名函数每次执行都单独生成一个作用域保存索引
                                                           // 独立作用域  保证保存的变量不被循环修改
            console.log(index);                          //每次点击 打印自己的索引 
        }
    })(i)      //( 传实参 index接收)
};
//https://blog.csdn.net/hpasdabc?spm=1000.2115.3001.5343
//变量保存在匿名函数的作用域 匿名结束就清空 没有全局变量

for(let i=0;i<ali.length;i++){
        ali[i].onclick = function(){
            console.log(i);
        }
    }

let触发块级作用域 在{}中用let声明变量  会变成{}的局部变量 循环的{}产生多个作用域保存变量

从外部给回调函数传参  (例:计时器传参 事件委托的封装)
    直接()传参 函数立即执行 不等待计时             函数返回值是什么?undefined(没有return的东西)

    setTimeout(fn("hahahah"),5000);
    function fn(str){
        return function(){           参数暂时保存到返回的函数上
            console.log(str);
        }
    }
    函数立即执行 得到结果是一个小函数 小函数延时后执行 结果不变但是参数str传递
---------------------------------------------------------------------------------------------------------------
函数分为 定义上下文 执行上下文(this)闭包核心 作用域链
函数执行 函数内部可以拿到自己定义上下文中的变量   

var a = 10;
function fn(){
    var a = 20;
    return function(){console.log(a)}       //20
}
         //在全局拿不到局部的变量a=20 f()在全局执行怎么使用局部变量a ==> 作用域链
//https://blog.csdn.net/hpasdabc?spm=1000.2115.3001.5343

var f = fn();               //经过return f实际是匿名函数
f();                   // 匿名函数的定义上下文 是fn的作用域 f可以获得fn范围内的变量

为什么a不是10
就近原则,
js会先查找自己有没有这个变量,如果有,就用自己的,如果没有就向上级查找,上级还是没有就到上上级去查找,如此循环,在哪找到,就在哪停止。如果全都没有,就返回undefined。
---------------------------------------------------------------------------------------------------------------
面试
内存溢出是什么     内存容量不足  
内存溢出可能的原因  死循环 闭包 容量不足

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值