zoukankan      html  css  js  c++  java
  • 语言特性-闭包

    闭包:闭包本质上就是函数内部和函数外部架起的一座桥梁。闭包是能够读取其他函数作用域内的变量的函数,由于变量是由作用域范围的,要读取其他作用域范围的变量,需理解javascript的“链式作用域结构”,子对象一级一级的向上寻找父作用域对象。

    一个小例子:

    function f1() {

                var n = 99;

                function f2() {

                    return n;

                }

                return f2;

            }

            var result = f1();

            alert(result());

            //比如这个例子:在f1外部是没办法访问n变量的。但是f1内部的函数f2却可以做到;

            //那么我们可以让f1函数返回f2函数,通过f2可以在外部拿到n值。

    闭包的作用:

    1.  setTimeout/setInterval                                                  

    例: var num = 0;
            function addnum() {
                document.getElementById("txtdata").value = num;
                num = num + 1;
                setTimeout("addnum()", 1000);
            }

    2.  回调函数(callback):把函数作为参数,当主函数执行完毕后,再执行传进来的函数。

    <script language="javascript" type="text/javascript">
         
         function a(callback, msg) {
            alert("wo xian lai!" + msg);
            callback(msg);
        }
        function callback(msg) {
            document.getElementById("txtdata").value = msg;
        }
        a(callback, ",ni deng deng");
    </script>

     

    3.       事件句柄(event handle
    <script language="javascript" type="text/javascript">
         
         function hello() {
            var str = "hello";
            document.writeln(str);
        }
         window.onload = hello;
    </script>

    4.       利用闭包可以将我们自己定义的一些函数包起来。利用命名空间方式访问,增加代码可读性和安全性,避免不经意间的覆盖。

    例:<main.js>

    (function() {

        function SetUserFieldFocus() {

            document.getElementById('txtdata').value = "rxm";

        }

        window['NianJia'] = {};

        window['NianJia']['SetUserFieldFocus'] = SetUserFieldFocus;

    })();

     

    页面实现:

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head runat="server">

        <script language="javascript" type="text/javascript" src="main.js"></script>

        <title>null</title>

    </head>

    <body>

        <form id="form1" runat="server">

        <div>

            <input id="txtdata" type="text" onfocus="NianJia.SetUserFieldFocus();" />

        </div>

        </form>

    </body>

    </html>

  • 相关阅读:
    编译不通过:提示XXXX不是类或命名空间名 的解决办法
    nginx应用总结(2)--突破高并发的性能优化
    nginx应用总结(1)--基础认识和应用配置
    springboot内置tomcat验证授权回调页面域名
    MySQL实现类似Oracle中的nextval和currval
    Notepad++中删除连续的任意n行
    Spring Boot系列二 Spring @Async异步线程池用法总结
    Spring线程池配置
    Spring异步方法注解 @Async
    异步任务spring @Async注解源码解析
  • 原文地址:https://www.cnblogs.com/hometown/p/3204220.html
Copyright © 2011-2022 走看看