javascirpt 的闭包----我的简介

我觉得在说闭包之前,必须的知道一个东西,就是全局变量和局部变量。 
全局变量和局部变量是相对的.
var num1 = 0;
        function ClassA() {
            var num1 = 10;
   alert(num1);// 10
        }
        alert(num1); // 0


这个num1就是全局变量和局部变量。


// 在看一段js代码
function ClassA() {
            var a = 2;
            fun1 = function () {
                return a;
            };
        }
var a = new ClassA();
var result = a.fun1(); // 2
alert(result); // 2


这就是一个简单的闭包。
简单的说:闭包就是函数中的函数,因为在ClassA中,变量a是它的独有的变量,在他的外部是不能访问的,但是有些时候,我们在外部又
需要这个变量,那么就可以使用闭包,返回这个变量。当然也可以把这个变量定义为全局的变量,但是当全局变量太多或者你不想这个变量
被ClassA以外的代码操作,闭包就是你的选择。


在看一段C#代码:
public class ClassA
    {
        private string str = "str";
        public string GetStr()
        {
            return str;
        }
    }
这是一个类ClassA,它有个方法返回它的私有字段str。内部有个函数可以返回它的变量,这就是他们的相同的地方。

不同的地方是js中的闭包可以在函数中继续使用函数返回其他的变量。


总的来说,在javascript中一个函数就是一个闭包。但是我们一般说的闭包是函数中的函数,这样的闭包功能才会更加的强大。

当然闭包也不能乱用,这样会造成内存的过度损耗。这个要从javascript的作用域和作用域链说起了。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值