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>

  • 相关阅读:
    【WCF--初入江湖】04 WCF通信模式
    【WCF--初入江湖】03 配置服务
    c++输出左右对齐设置
    setw()函数
    clion更改大括号的位置
    emacs org-mode 中文手册精简版(纯小白)
    c++ string 类型 大小写转换 
    C++中string类型的find 函数
    string类型 C++
    统计单词数---单词与空格
  • 原文地址:https://www.cnblogs.com/hometown/p/3204220.html
Copyright © 2011-2022 走看看