作用域和闭包

  • 变量提升


    作用域和闭包_第1张图片
    图片.png

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

题目:

作用域和闭包_第2张图片
图片.png

知识点:

  • 执行上下文
作用域和闭包_第3张图片
图片.png
作用域和闭包_第4张图片
图片.png
  • this
作用域和闭包_第5张图片
图片.png

this执行时的几种场景:

作用域和闭包_第6张图片
图片.png
作用域和闭包_第7张图片
图片.png
this===zhangsan 
this===A
this===window

在最后一种情况下,

作用域和闭包_第8张图片
图片.png

this==={x:100}

作用域和闭包_第9张图片
图片.png

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

作用域

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

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


作用域和闭包_第10张图片
图片.png

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

闭包

作用域和闭包_第11张图片
图片.png

闭包的实际应用场景:


作用域和闭包_第12张图片
图片.png

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

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


      作用域和闭包_第13张图片
      图片.png

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

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


    作用域和闭包_第15张图片
    图片.png

    正确的写法:

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


    图片.png

你可能感兴趣的:(作用域和闭包)