加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

最简明的JavaScript闭包介绍

发布时间:2021-11-19 10:24:14 所属栏目:PHP教程 来源:互联网
导读:JavaScript是这几年最火的编程语言之一,从前端到服务器端,再到脚本,好像没有一个地方没有JavaScript的身影。这个世界上任何的一种事物的存在必然有其合理性,不要以为别人都是小人得志,学习众家的长处才能开阔视野,青出于蓝。 JavaScript的闭包是其相对

JavaScript是这几年最火的编程语言之一,从前端到服务器端,再到脚本,好像没有一个地方没有JavaScript的身影。这个世界上任何的一种事物的存在必然有其合理性,不要以为别人都是小人得志,学习众家的长处才能开阔视野,青出于蓝。
 
JavaScript的闭包是其相对于好多传统语言不太容易理解的地方,其实并不是它有多难,因为我们好多朋友都是有其他语言背景的,比如C/C++或者Java,这样往往可能会有些先入为主的思维,导致不容易一下子转变过来,其实稍微习惯一下就好了,大家都是高手,下面我们直入主题。
 
JavaScript闭包是什么:
 
简单的说就是函数套函数,JavaScript中的函数其实相当于其他语言中的对象,如果不特别说明,下面我说的函数和对象都是可以互换的, 当所有的函数都执行完了,由于内层的函数作为结果返回了,导致外层的对象仍然被引用,所以外层对象不释放,其中的变量仍然可以使用。
 
明白了以上的道理,下面两个例子就很容易理解了。
 
首先看第一段代码,这段代码的输出结果都是10,因为 createFunctions 函数执行完后 i 的值是10, createFunctions 对象中这个时候存储的i就是10, 而下面的代码每次都是输出最后的对象中的状态i = 10, 所以结果一目了然。
 
function createFunctions(){
                var result = new Array();
               
                for (var i=0; i < 10; i++){
                    result[i] = function(){
                        return i;
                    };
                }
               
                return result;
            }
           
            var funcs = createFunctions();
           
            //every function outputs 10
            for (var i=0; i < funcs.length; i++){
                document.write(funcs[i]() + "<br />");
            }
 
执行结果:
 
10
10
10
10
10
10
10
10
10
10
 
再来看下面这段代码createFunctions 函数执行完i也是10,但是返回的函数每次都使用的自己的局部变量num,而不是外部对象createFunctions中的i=10,所以每次的输出结果为0-9.
 
function createFunctions(){
                var result = new Array();
               
                for (var i=0; i < 10; i++){
                    result[i] = function(num){
                        return function(){
                            return num;
                        };
                    }(i);
                }
               
                return result;
            }
           
            var funcs = createFunctions();
           
            //function outputs 1-9
            for (var i=0; i < funcs.length; i++){
                document.write(funcs[i]() + "<br />");
            }
 
执行结果:
 
0
1
2
3
4
5
6
7
8
9
 
总结
 
通过这两段代码的理解,希望大家对JavaScript闭包由一个全新的认识,JavaScript闭包是JavaScript语言的难点,也是其精髓之一,希望本文能对大家有所帮助,如果大家能有一点点的启发,本文的目的就达到了。 

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读