作用域和闭包

2017-07-17  本文已影响0人  Hathaway_桉

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

<h1>题目:</h1>

图片.png

<h1>知识点:</h1>

图片.png 图片.png 图片.png

this执行时的几种场景:

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

在最后一种情况下,

图片.png

this==={x:100}

图片.png

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

<h1>作用域</h1>

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


图片.png

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

<h1>闭包</h1>

图片.png

闭包的实际应用场景:


图片.png

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

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

图片.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
上一篇下一篇

猜你喜欢

热点阅读