在学习JavaScript这条路上,对于闭包这个JS中极其重要的应用技巧或者说是一个语言特性一直停留在最最表层的:

函数α内部的函数β被函数外部所调用,然后内部的函数β因为被调用使得其生存周期得以延长。

而本身不能被外部调用的函数α的变量,则能够被调用。

然而往略微深一点的层次里去探究,就会发现闭包对理解JS作用域链有着极大的作用。

举例说明:

var guo = function(status){
       return {
              get_status:function(){
                     return status;
              }
       }
}
var myQuo_1 = guo("amazed_me");
var myQuo_ 2= guo("amazed_u");
測试这俩个对象是否共用一个status,你会发现,俩个对象所返回的status是不同样的。能够看出,JS对象作用域链上所绑定的对象并不是是我们想当然的那个对象,而是在函数调用时所伴生的一个活动对象,这个对象里在函数的生命周期里保存了,函数传入的參数列表以及绑定的this值。

所以闭包内部函数所具有的作用域链上连接有外部函数以及其本身的活动对象,而非这些函数对象本身。能够试想。若作用域链上所保有的对象是函数对象本身,样例中的,俩个实例对象的私有status属性就应该是guo的属性,即是共同拥有属性,值应该是同样的。

posted on 2017-05-02 13:19  lxjshuju  阅读(111)  评论(0编辑  收藏  举报