js闭包

2020-06-07  本文已影响0人  海晏河清_富贵荣华
1、js的闭包
function a(){
    var i = 0;
    function b(){
        alert(i++);
   }
   return b;
}

var c = a();
c();

执行完 var c = a()后,变量c实际指向函数名b,再执行 c()会alert(1)[第一次],这段代码创建了一个闭包。因为函数a外的变量引用了函数a内的函数
当函数a内部的函数b,被函数a外的变量引用时,就创建了一个闭包

2、闭包的作用

a执行完,并返回后,闭包使js的垃圾回收机制GC不会回收a所占用的资源,因为函数a的内部函数b的执行需要依赖a中的变量

3、闭包与this对象

在闭包中使用this对象会导致一些问题,因为匿名函数的执行具有全局性,this通常指向window代码
把外部作用域的this对象保存在一个闭包能够访问的变量里面,就能让闭包访问该对象

var name = "The Window"
var object = {
    name = "My Object",
    getName:function(){
         var that = this;   //有此语句,指向My Object,无此语句,指向The Windwo
         return function(){
             return that name;
         }
   }
}
alert(object.getName(){})
4、Js插件中闭包的应用
     (function(){
            alert("...")
     })
上一篇下一篇

猜你喜欢

热点阅读