美文网首页
作用域和闭包

作用域和闭包

作者: Hathaway_桉 | 来源:发表于2017-07-17 22:00 被阅读0次
    • 变量提升


      图片.png

    函数声明可以提前,函数表达式不可以提前。fn可以输出,fn1不可以。

    <h1>题目:</h1>

    图片.png

    <h1>知识点:</h1>

    • 执行上下文
    图片.png 图片.png
    • this
    图片.png

    this执行时的几种场景:

    图片.png 图片.png
    this===zhangsan 
    this===A
    this===window
    

    在最后一种情况下,

    图片.png

    this==={x:100}

    图片.png

    上面这种方式的输出this==={y:200}

    <h1>作用域</h1>

    • js中没有块级作用域
    • js只有全局作用域和函数作用域

    <b>作用域链</b>
    一个自由变量一直不断的向其父级作用域寻找作用域


    图片.png

    打印a的时候,函数里面没有定义a变量,因此找函数的父级作用域,即是全局作用域,找到了打印100。

    <h1>闭包</h1>

    图片.png

    闭包的实际应用场景:


    图片.png

    上述例子可以用_list来记录变量值,第一次记录了变量的值后,第二次来的时候显示false,进不去。这样就达到了收敛权限的作用。

    • 说一下对变量提升的理解
      • 变量提升


        图片.png

    函数声明可以提前,函数表达式不可以提前。fn可以输出,fn1不可以。

    • 说明this几种不同的使用场景
    图片.png
    • 创建10个a标签,点击的时候弹出来对应的序号
      错误的写法,i会一直都是10。


      图片.png

      正确的写法:

     var a,i;
        for(i=0;i<10;i++){
            (function(i){
                a=document.createElement('a');
                a.innerHTML=i+"<br>";
                a.addEventListener('click',function(e){
                    e.preventDefault();
                    alert(i);
                });
                document.body.appendChild(a);
            })(i);
    
        }
    
    • 如何理解作用域?
    图片.png
    • 总结闭包的使用场景:


      图片.png

    相关文章

      网友评论

          本文标题:作用域和闭包

          本文链接:https://www.haomeiwen.com/subject/mrsxkxtx.html