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" οnclick="alert(fun(1))" value="按钮1"/>
<input type="button" οnclick="alert(fun(2))" value="按钮2"/>
<input type="button" οnclick="alert(fun(3))" value="按钮3"/>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中的闭包是指一个函数能够访问并使用其外部作用域中的变量,即使在该函数被调用之后,该外部作用域的上下文已经销毁。简单来说,闭包是指一个函数保留了对其词法作用域的引用,使得函数可以访问和操作外部作用域的变量。 在JavaScript中,闭包可以通过函数嵌套来创建。当一个函数在内部定义了另一个函数,并且内部函数引用了外部函数的变量,那么内部函数就形成了闭包闭包函数可以访问和修改外部函数的变量,即使在外部函数执行完毕后,这些变量依然存在于闭包函数的作用域中。 以下是一个闭包函数的例子: ```javascript function outerFunction() { var outerVariable = 'Hello'; function innerFunction() { console.log(outerVariable); } return innerFunction; } var closure = outerFunction(); closure(); // 输出 'Hello' ``` 在这个例子中,内部函数`innerFunction`形成了闭包,它可以访问和使用外部函数`outerFunction`中的变量`outerVariable`,即使`outerFunction`执行完毕后,闭包仍然可以访问和操作`outerVariable`的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [JavaScript中的闭包](https://blog.csdn.net/qq_44482048/article/details/128714553)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [轻松学习Javascript闭包函数](https://download.csdn.net/download/weixin_38628429/13018893)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [JavaScript闭包](https://blog.csdn.net/qq_57586976/article/details/127678306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值