深入javascript闭包

1 篇文章 0 订阅
1 篇文章 0 订阅

       闭包(Closure)与函数有着紧密的关系,以至于许多人将函数与闭包等同起来讨论,事实上在javascript中,一个函数只是一段静态代码,脚本文本,因此它是一个代码书写时,以及编译期的,静态的概念;而闭包则是函数的代码在运行过程中的一个动态环境,是一个运行期的,动态的概念由于引擎对每个函数建立其独立的上下文环境,因此当函数再次被执行或者通过某种方法进入函数体内时就可以得到闭包内的全部信息。

        闭包具有两个特点:第一是闭包作为与函数成对的数据,在函数执行过程中处于激活(即可访问)状态;第二是闭包在函数运行结束后,保持运行过程数据的最终状态。因此函数的闭包总的来说决定了两件事:闭包所对应的函数代码如何访问数据,以及闭包内的数据何时销毁。


function MyFunc() {                    

    var data_1 = 123;   //upvalue          

    var data_2 = new Array();     //upvalue

|

function func_1() {   //.......... 闭包2            

        

}


function func_n() { //..........             闭包n          

   

   //................                            

上面这个例子并不能很好的传达出"闭包是运行前概念"这样的信息,仅能从静态的视觉效果上说明闭包,子函数闭包,upvalue之间的关系。 在运行过程中,子函数闭包(闭包2~n)可以访问upvalue;同一个函数中的所有子函数(闭包2~n),访问一份相同值的upvalue

function MyFunc() {

var data = 100;

function func_1() {

Data = data * 5;

}

function func_n() {

Alert(date);

}

func_1();

func_n();

}

MyFunc();

由于func_1func_n使用相同的upvalue变量data,因此在func_n中可以,由于func_1()对该值的修改,返回结果值500


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值