闭包 订阅
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 [1] 展开全文
闭包就是能够读取其他函数内部变量的函数。例如在javascript中,只有函数内部的子函数才能读取局部变量,所以闭包可以理解成“定义在一个函数内部的函数“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。 [1]
信息
相关学科
离散数学
特    点
未绑定到特定对象
本    质
将函数内部和外部连接起来的桥梁
用    途
编程逻辑
中文名
闭包
外文名
closure
闭包简单介绍
闭包包含自由(未绑定到特定对象)变量,这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。在PHP、Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。
收起全文
精华内容
参与话题
问答
  • 闭包

    万次阅读 2017-06-28 22:55:46
    闭包

    闭包是指可以包含自由(未绑定到特定对象)变量的代码块;这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量)。
    “闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。
    在PHP、Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Go、Lua、objective c、swift 以及Java(Java8及以上)等语言中都能找到对闭包不同程度的支持。

    下面举个例子:

    <html>
        <head>
            <title>practice3</title>
            <script type="text/javascript">
                function funcRef(i,item,list,x){
                    alert(i+" "+item+" "+list+" "+x.toString());
                }
                function funcVal(i,item,list){
                    return function(x){
                        alert(i+" "+item+" "+list+" "+x.toString());
                    }
                }
                function buildList(list){
                    var result=[];
                    for(var j=0;j<2;j++){
                        for(var i=0;i<list.length;i++){
                            var item="Item"+i.toString();
                            if(j==0){
                                result.push(function(x){funcRef(i,item,list[i],x)});
                            }else{
                                result.push(funcVal(i,item,list[i]));
                            }
                        }
                    }
                    return result;
                }
                var fnlist = buildList([20,30,50]);
                for(var i=0;i<fnlist.length;i++){
                    fnlist[i](i);
                }
            /*闭包和匿名函数
                function add(){
                    var i=0;
                    (function(x){
                        alert(x);
                    })(2);
                }
                add();
            */
            /*
            function time(){
                var i=2;
                setInterval(function(){alert(i)},2000);
            }
            time();
            */
            </script>
        </head> 
    </html>

    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 53,751
精华内容 21,500
关键字:

闭包