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>

  • 相关阅读:
    .NET 正则表达式使用高级技巧之替换类介绍
    道法术器势
    JS函数匿名替换
    批量更改数据库表架构(生成sql后直接执行!)
    转: 从现实生活中理解什么是广播机制
    public View getView(int position, View convertView, final ViewGroup parent)三个参数的意思
    Android Intent个人介绍
    WPF中Timer与DispatcherTimer类的区别
    C# 使用ManualResetEvent 进行线程同步
    C# 使用AutoResetEvent进行线程同步
  • 原文地址:https://www.cnblogs.com/hometown/p/3204220.html
Copyright © 2011-2022 走看看