作用域和闭包

  • 变量提升


    图片.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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容