语言特性-闭包

闭包:闭包本质上就是函数内部和函数外部架起的一座桥梁。闭包是能够读取其他函数作用域内的变量的函数,由于变量是由作用域范围的,要读取其他作用域范围的变量,需理解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>

posted @ 2013-07-17 13:50  hometown  阅读(169)  评论(0编辑  收藏  举报