闭包 详细解释与举例2

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

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

var ali = document.querySelectorAll("li");
for(var i=0;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。
---------------------------------------------------------------------------------------------------------------
面试
内存溢出是什么     内存容量不足  
内存溢出可能的原因  死循环 闭包 容量不足

你可能感兴趣的:(javascript,jquery,ajax,chrome,html5)