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闭包

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。