在学习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的属性,即是共有属性,值应该是相同的。
网友评论