javascript闭包葵花宝典

js闭包学习:

  闭包概念:即函数可以嵌套;即内层的函数可以应用存在于包围它的函数内的变量及函数的参数,即使外层的执行已经终止。

  使用场景:保护函数的变量安全、在内存中维持一个变量、通过保护变量的安全实现javascript私有属性和私有方法。

 闭包的形成:当一个内部函数在包含它们的外部函数之外被调用时,就会形成闭包.

 

  闭包的特点
     作为一个函数变量的引用,当函数返回时,其处于激活状态;
     一个闭包就是当一个函数返回时,一个没有释放资源的栈区;
    总之闭包函数返回时,该函数内部变量处于激活状态,函数所在栈区依然保留;
就像java中方法执行了return,就返回结果,然后从内存中删除该方法所在区域,生命周期也就结束。一般的js也一样。
但闭包特性的js有点特殊:
eg:
   <html><head>
<script type="text/javascript">
function a(){
 var i=0;
 function b(){
 alert(++i);
 }
 return b;
}
var c = a();
c();
c();

</script>
</head>
<body>
</body>
</html>

这是个标准的闭包.在函数a中定义了函数b,a又return了b的值.这些可以先不管.
var c = a();
c();
这两句执行很重要.
在var c = a();这行里,执行了a函数,那么肯定a经过了return.按照主流语言的函数特性,现在c的值就是a的返回值.
第二行c()的执行实际执行的就是b函数.最后不管执行的是谁,会弹出一个值为0的窗口,到此为止,所有的生命周期按理论来说就算全部结束了.
可是,如果我们再多执行一行.
var c = a();
c();
c();
第一次弹出1,第二次执行却弹出了2.

也就是说,第一次c()后,a中的i依然保留.自然a在内存的栈区依然保留.

a是return过了,但是,a及内部值却依然存在,这就是闭包.

 

对象属性名解析:
 ECMAScript认可两类对象:原生(Native)和宿主(host)对象,
 宿主对象包含一个被称为内置对象的原生对象的子类;
 原生对象属于语言,而宿主对象由环境提供,可能是文档对象、Dom等;对象命名属性用于保存值.
      值的赋予:
              var obj=new Object();//创建对象
      obj.testNum=5;//创建testNum的属性
                   alert(obj.testNum);//5
                //或者 obj["testNum"]=5;//创建testNum的属性
  //  重新赋值
                 obj.testNum=8;
         alert(obj.testNum);//8
              //或者obj["testNum"]=8;
      标示符解析、执行环境和作用域:
       执行环境:是ECMAScript规范用于定义ECMAScript实现必要行为的一个抽象概念.  
    全局代码即作为内置的js文件执行的代码,或者html页面加载的代码为全局执行环境
  总结下闭包
    闭包的外层是个函数;
    闭包的内部都有函数;
    闭包会return内部函数;
    闭包返回的函数内部不能有return(不然真的就结束了) ;
    执行闭包后,闭包内部变量会一直存在,而闭包内部函数的内部变量不会存在。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值