zoukankan      html  css  js  c++  java
  • javascript——闭包

     1 <script type="text/javascript">
     2         //什么是闭包:
     3         //是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落。
     4         //这些外部执行域的非持久型变量神奇地保留它们在闭包最初定义(或创建)时的值(深连结)。
     5         //简单来说,闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),
     6         //而这些键值对是不会随上一级函数的执行完成而销毁。
     7         //周爱民说得更清楚,
     8         // 闭包就是“属性表”,
     9         // 闭包就是一个数据块,
    10         // 闭包就是一个存放着“Name=Value”的对照表。
    11         // 就这么简单。但是,必须强调,闭包是一个运行期概念。
    12 
    13 
    14         with (obj) {
    15             //这里是对象闭包
    16         }
    17         (function () {
    18             //函数闭包
    19         })()
    20         try {
    21             //...
    22         } catch (e) {
    23             //catch闭包 但IE里不行
    24         }
    25 
    26         function User(properties) {
    27             var _self = this;
    28             for (var i in properties) {
    29                 (function () {
    30                     //在闭包内,t每次都是新的,而properties[i]是for里面的
    31                     var t = properties[i];
    32                     _self["get" + i.toLocaleLowerCase()] = function () {
    33                         return t;
    34                     }
    35                     _self["set" + i.toLocaleLowerCase()] = function (val) {
    36                         t = val;
    37                     }
    38                 })();
    39             }
    40         }
    41 
    42         var a = (function (n) {
    43             debugger;
    44             if (n < 1) {
    45                 alert("invalid arguments");
    46                 return 0;
    47             }
    48             if (n == 1) {
    49                 return 1;
    50             }
    51             else {
    52                 return (n * arguments.callee(n - 1));
    53             }
    54         })(4);
    55 
    56         document.writeln(a);
    57 
    58         var user1 = new User({
    59             name: "张三",
    60             age: 22
    61         });
    62 
    63         alert(user1.getname());
    64         alert(user1.getage());
    65 
    66         user1.setname("李四");
    67         user1.setage(25);
    68 
    69         alert(user1.getname());
    70         alert(user1.getage());
    71     </script>
    javascript闭包

     其中经典闭包函数:

    var fun=function(e){
          console.log("步骤1:"+e)
          fun=function(){
          console.log("步骤2:"+e)
               return e;    
          }
          return fun();
    }

    <input type="button" onclick="alert(fun(1))" value="按钮1"/>
    <input type="button" onclick="alert(fun(2))" value="按钮2"/>
    <input type="button" onclick="alert(fun(3))" value="按钮3"/>

  • 相关阅读:
    [小技巧] micropython 如何执行 *.mpy 文件
    从零开始深入 Linux 底层(软件工程)
    从嵌套结构中取值时如何编写兜底逻辑
    学习JUC源码(2)——自定义同步组件
    学习JUC源码(1)——AQS同步队列(源码分析结合图文理解)
    Java多线程中的wait/notify通信模式
    详解Java锁的升级与对比(1)——锁的分类与细节(结合部分源码)
    认识Redis集群——Redis Cluster
    工作三年多的感慨与总结(二)
    工作三年多的感慨与总结(一)
  • 原文地址:https://www.cnblogs.com/goesby/p/4196008.html
Copyright © 2011-2022 走看看