语言特性-闭包

本文详细介绍了JavaScript中的闭包概念,包括闭包如何读取其他函数作用域内的变量,并通过实例展示了闭包在定时器、回调函数及事件处理程序中的应用。此外还探讨了使用闭包提高代码安全性和可读性的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值